2009-09-14 7 views
8

Ich verwende WMI Win32_MonitorDesktop, um alle Monitorinformationen auf dem System zu erhalten.WMI Alle Monitore erhalten, die nicht alle Monitore zurückgeben

Es gibt jedoch nur eins zurück. Ich habe es auf mehreren Computern versucht, und sie haben definitiv mehrere Monitore auf ihnen, verbunden und arbeiten.

ManagementObjectSearcher monitorObjectSearch = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor"); 

foreach (ManagementObject monitor in monitorObjectSearch.Get()) 
{ 
     Debug.WriteLine(monitor["Description"]); 
} 

Weiß jemand, warum ich nur 1 Monitor zurückbekomme?

Auch wenn ich den Rückgabewert von MonitorObjectSearch.Get() zu einer Variablen zuweisen, kann ich die Count-Eigenschaft im unmittelbaren Fenster nicht als die Funktion immer Timeout ausgewertet werden.

+0

Beginnend mit Windows Vista, Hardware, die nicht kompatibel ist mit Windows Display Driver Model (WDDM) gibt ungenaue Eigenschaftswerte für Instanzen dieser Klasse zurück. (Von http://msdn.microsoft.com/en-us/library/aa394122(VS.85).aspx) –

+0

Das sagt, dass es ungenaue Eigenschaftswerte zurückgibt, die Werte, die ich für den einzelnen Monitor bekomme, sind korrekt. Ich bekomme nur 1 Monitor. –

+0

Wenn ich Screen.AllScreens verwende, habe ich 2 im Array, aber ich kann nicht den "netten" Namen des Monitors von hier bekommen. –

Antwort

1

Es könnte sein, dass die Monitore in einem horizontalen Spannweitenmodus (NV und ATI-Karten) eingerichtet sind, die mehrere Monitor-Setups in einen großen Monitor machen? Sonst werde ich weiter denken.

Auch die MSDN quite specifically states, dass, wenn dieser WMI-Aufruf mit irgendetwas vor-Vista verwendet wird, wird es zu ungenauen Ergebnissen führen !?

+0

Das Setup ist zwei verschiedene Desktops nicht als ein großer Monitor. Ich bin auf Vista, sowohl 64 als auch 32. –

0

Ich verwende den gleichen Code von WMI (Win32_Desktopmonitor) auf einem Windows 7-Rechner. Es funktioniert dort auch nicht, in dem Sinne, dass nur ein Monitor zurückgegeben wird, wo es wirklich zwei gibt.

Auch Screen.Allscreens.Length, gibt nur 1 Monitor zurück. Die einzige Möglichkeit, das System dazu zu bringen, zwei Monitore zurückzugeben, besteht darin, den Desktop auf die zwei Monitore auszuweiten, aber das tun die meisten Leute nicht.

1

Ich habe versucht, dieses Problem mit WMI auf vielen Systemen (von WinXP-SP3 bis Win10) zu lösen, und ich habe verschiedene Ergebnisse auf verschiedenen Computern. Es gibt zwei Tabellen, in denen die aktuellen Monitoreinstellungen gespeichert werden können. Zunächst ist Win32_DesktopMonitor in cimv2 Namensraum, der zweite ist WMIMonitorID in wmi Namespace. Wenn einer von ihnen nur einen Datensatz (in Multi-Display-Einstellung) hat, dann wird der zweite alle Einträge haben.

Dann Treibernamen von Monitor zu bekommen, sollte man Geräte finden mit PnPDeviceID in Aufzeichnungen aus diesen Tabellen in Tabelle Win32_PnPEntity gefunden, in cimv2 Namespace. Sie können die Beispiellösung here überprüfen.

0

Dies ist sicherlich nicht Ihre eigentliche Frage beantworten, aber zuverlässigste Weg Monitor Informationen herauszufinden, ist folgenden Registry zu lesen:

"SYSTEM\CurrentControlSet\Enum\DISPLAY\" 

unter HKEY_LOCAL_MACHINE

Verwandte Themen