2010-04-08 21 views
13

Estoy tratando de recuperar las ID del monitor como se muestra en las propiedades de pantalla de Windows (# 1, 2 ... etc), pero parece que no puedo encontrar la manera. He intentado usar EnumDisplayMonitors así como EnumDisplayDevices. Ambos devuelven algo así como "\. \ DISPLAY1". Sin embargo, este número no siempre coincide con el número que muestra Windows, especialmente cuando se utilizan 2 tarjetas de video para controlar 3 o más monitores. ¿Existe una llamada de API que me falta para recuperar esta información, o hay una forma de obtenerla del registro o en otro lugar? ¡Gracias!¿Cómo puedo recuperar la información del monitor?

me han tratado estos métodos:
Win32: EnumDisplayMonitors, EnumDisplayDevices: Ninguno de estos monitores de retorno que no son activos, y ninguno devuelve los identificadores correctos.
WMI: "select * from Win32_DesktopMonitor" no devuelve todos los monitores, y no hay ningún ID.
Registro: He encontrado los monitores en varias ubicaciones, ninguno de los lugares que encontré tiene la información que estoy buscando.

Cualquier ayuda es muy apreciada. :)

Actualización: Estos son los números de monitores Estoy buscando: alt text

+1

Pregunta anterior, ¿Alguna vez encontró una respuesta? –

+1

¿Alguien alguna vez encuentra una solución? – flashk

+1

@JoelBarsotti, ¿resolvió ese problema? –

Respuesta

0

sólo una suposición, pero se ve como Windows muestra iDevNum+1 en las propiedades de pantalla de Windows.

+0

Desafortunadamente este no es el caso, sería demasiado fácil. :) Si tiene un sistema de monitor doble, intente hacer # 2 su principal e inhabilitar # 1. # 2 todavía se llamará número 2 en la ventana Propiedades de Pantalla, pero será el primer monitor devuelto por EnumDisplayDevices (iDevNum 0). :( –

+0

Además, el orden que los monitores devuelven EnumDisplayMonitors parece ser aleatorio. La mayoría de las veces los devolverá en el mismo orden, pero si tiene 2 tarjetas de video que controlan 3 monitores, puede cambiar. –

+0

Este cliente potencial por el camino correcto, pero no es correcto para Windows 7. –

1

Dependiendo de la finalidad, es posible que desee mirar hacia una solución basada en el controlador. Sé que nVidia tiene algunas librerías decentes que te dan acceso a la mayoría de las funciones en el panel de control.

+0

Esta es una idea interesante, pero necesito algo más general y no puedo depender de controladores específicos. –

1

¿Hizo dos llamadas a EnumDisplayDevices? Pruebe algo como:

while (EnumDisplayDevices(0, dev, &dd, 0)) 
{ 
... 
    while (EnumDisplayDevices(dd.DeviceName, devMon, &ddMon, 0)) 
    { 
    ... 
    } 
} 
+0

He hecho esto, pero ¿dónde se devuelve el número de monitor? –

+0

¿Qué quiere decir con número de monitor? Si el mencionado "devMon", entonces comience con devMon = 0, y haga devMon ++ en el interno "while". – VitalyVal

+0

He actualizado la pregunta con una imagen de los números de monitor que estoy buscando. –

Cuestiones relacionadas