2009-09-14 14 views
8

Sto utilizzando WMI Win32_MonitorDesktop per ottenere tutte le informazioni sui monitor sul sistema.WMI Ottieni tutti i monitor che non restituiscono tutti i monitor

Tuttavia restituisce solo uno. L'ho provato su diversi computer, e hanno sicuramente più monitor su di loro, connessi e funzionanti.

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

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

Qualcuno sa perché sto ricevendo solo 1 monitor restituito?

Anche se assegno il valore restituito di monitorObjectSearch.Get() a una variabile, non sono in grado di valutare la proprietà Count nella finestra immediata in quanto la funzione scade sempre.

+0

partire da Windows Vista, l'hardware che non è compatibile con Windows Display Driver Model (WDDM) restituisce valori di proprietà non accurati per le istanze di questa classe. (Da http://msdn.microsoft.com/en-us/library/aa394122(VS.85).aspx) –

+0

Che dice che restituirà valori di proprietà non accurati, i valori che ottengo per il singolo monitor sono corretti. Ho solo 1 monitor. –

+0

Quando si utilizza Screen.AllScreens, ho 2 nella matrice, tuttavia da qui non riesco a ottenere il nome "bello" del monitor. –

risposta

1

È possibile che i monitor siano configurati in modalità di span orizzontale (schede NV e ATI) che effettivamente configurano più monitor in un unico monitor grande ? Altrimenti, continuerò a pensare.

Anche lo MSDN quite specifically states che se questa chiamata WMI viene utilizzata con qualsiasi pre-vista produrrà risultati inaccurati !?

+0

L'installazione è composta da due desktop diversi non come un grande monitor. Sono su Vista, sia sul 64 che sul 32. –

0

Io uso lo stesso codice da wmi (win32_Desktopmonitor) su un computer Windows 7. Non funziona anche lì, nel senso che viene restituito solo 1 monitor, dove ce ne sono davvero due.

Anche Screen.Allscreens.Length, restituisce solo 1 monitor. L'unico modo per far sì che il sistema restituisca 2 monitor è quello di estendere il desktop ai due monitor, ma non è quello che fa la maggior parte delle persone.

1

Ho provato a risolvere questo problema utilizzando WMI su molti sistemi (da WinXP-SP3 a Win10) e ho ottenuto risultati diversi su macchine diverse. Ci sono due tabelle in cui è possibile memorizzare le impostazioni correnti del monitor. In primo luogo è Win32_DesktopMonitor in CIMV2 spazio dei nomi, secondo è WMIMonitorID in WMI namespace. Se uno di questi ha solo un record (in multi display setting), il secondo avrà tutte le voci.

Quindi per ottenere il nome del driver di monitor, si dovrebbe trovare i dispositivi con PnPDeviceID trovato nel record da tali tabelle in Win32_PnPEntity tavolo, in CIMV2 namespace. È possibile controllare la soluzione campione here.

0

Questo certamente non rispondere alla tua domanda effettiva, ma modo più affidabile di capire informazioni monitor è da leggere seguente registro:

"SYSTEM\CurrentControlSet\Enum\DISPLAY\" 

sotto HKEY_LOCAL_MACHINE