2009-09-14 15 views
8

Estoy usando WMI Win32_MonitorDesktop para obtener toda la información de los monitores en el sistema.WMI Obtener todos los monitores que no devuelven todos los monitores

Sin embargo, solo devuelve uno. Lo probé en varias computadoras, y definitivamente tienen múltiples monitores en ellas, conectadas y funcionando.

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

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

¿Alguien sabe por qué solo obtengo 1 monitor devuelto?

Además, si asigno el valor de retorno de monitorObjectSearch.Get() a una variable, no puedo evaluar la propiedad Count en la ventana inmediata ya que la función siempre agota el tiempo de espera.

+0

A partir de Windows Vista, el hardware que no es compatible con El Modelo de controlador de pantalla de Windows (WDDM) devuelve valores de propiedad inexactos para las instancias de esta clase. (De http://msdn.microsoft.com/en-us/library/aa394122(VS.85).aspx) –

+0

Eso dice que devolverá valores de propiedad inexactos, los valores que obtengo para el monitor único son correctos. Solo obtengo 1 monitor. –

+0

Cuando uso Screen.AllScreens tengo 2 en la matriz, sin embargo, no puedo obtener el "buen" nombre del monitor desde aquí. –

Respuesta

1

Podría ser que los monitores estén configurados en un modo de intervalo horizontal (tarjetas NV y ATI) que efectivamente hacen configuraciones de monitores múltiples en un solo monitor grande? De lo contrario, continuaré teniendo una opinión ..

También el MSDN quite specifically states que si esta llamada WMI se utiliza con cualquier cosa previa a la vista, producirá resultados inexactos?

+0

La configuración es de dos escritorios diferentes, no como un gran monitor. Estoy en vista, tanto 64 como 32. –

0

Uso el mismo código de wmi (win32_Desktopmonitor) en una máquina con Windows 7. Tampoco funciona allí, en el sentido de que solo se devuelve 1 monitor, donde realmente hay dos.

También Screen.Allscreens.Length, solo devuelve 1 monitor. La única forma de que el sistema devuelva 2 monitores es extender el escritorio a los dos monitores, pero eso no es lo que hace la mayoría de la gente.

1

Intenté resolver este problema utilizando WMI en muchos sistemas (desde WinXP-SP3 hasta Win10), y obtuve resultados diferentes en diferentes máquinas. Hay dos tablas, donde se puede almacenar la configuración actual del monitor. En primer lugar es Win32_DesktopMonitor en cimv2 espacio de nombres, el segundo es WMIMonitorID en WMI espacio de nombres. Si uno de ellos tiene solo un registro (en configuración de pantalla múltiple), el segundo tendrá todas las entradas.

Luego de obtener el nombre del controlador del monitor, uno debe encontrar dispositivos con PnPDeviceID encuentra en los registros de las tablas en Win32_PnPEntity mesa, en cimv2 espacio de nombres. Puede verificar la solución de muestra here.

0

Ciertamente esto no soluciona su problema real, pero forma más fiable de averiguar información del monitor es leer del Registro siguiente:

"SYSTEM\CurrentControlSet\Enum\DISPLAY\" 

bajo HKEY_LOCAL_MACHINE

Cuestiones relacionadas