2010-04-08 21 views
13

Sto cercando di recuperare l'ID del monitor come mostrato nelle proprietà dello schermo di Windows (# 1, 2 ... ecc.), Ma non riesco a trovare un modo. Ho provato a utilizzare EnumDisplayMonitors e EnumDisplayDevices. Entrambi restituiscono qualcosa come "\. \ DISPLAY1". Tuttavia, questo numero non corrisponde sempre al numero indicato da Windows, in particolare quando vengono utilizzate 2 schede video per pilotare 3 o più monitor. C'è una chiamata API che mi manca per recuperare queste informazioni, o c'è un modo per ottenerla dal registro o da qualche altra parte? Grazie!Come posso recuperare le informazioni del monitor?

ho provato questi metodi:
Win32: EnumDisplayMonitors, EnumDisplayDevices: Nessuno di questi monitor di ritorno che non sono attivi, e nessuno restituisce gli ID corretti.
WMI: "select * from Win32_DesktopMonitor" non restituisce tutti i monitor e non è presente alcun ID.
Registro: Ho trovato i monitor in varie posizioni, nessuno dei luoghi che ho trovato ha le informazioni che sto cercando.

Qualsiasi aiuto è molto apprezzato. :) Aggiornamento

: Questi sono i numeri del monitor Cerco: alt text

+1

Vecchia domanda, mai trovare una risposta? –

+1

Qualcuno ha mai trovato una soluzione? – flashk

+1

@JoelBarsotti, hai risolto il problema? –

risposta

0

solo una supposizione, ma sembra che Windows mostra iDevNum+1 nelle proprietà dello schermo di Windows.

+0

Purtroppo questo non è il caso, sarebbe troppo facile. :) Se si dispone di un sistema a doppio monitor, provare a fare del # 2 il numero 1 principale e disabilitante. # 2 sarà ancora chiamato numero 2 nella finestra Proprietà dello schermo, ma sarà il primo monitor restituito da EnumDisplayDevices (iDevNum 0). :( –

+0

L'ordine con cui i monitor vengono restituiti da EnumDisplayMonitors sembra essere casuale, ma la maggior parte delle volte li restituisce nello stesso ordine, ma se si dispone di 2 schede video che pilotano 3 monitor, è possibile cambiare in giro. –

+0

mi trovo sulla giusta strada, ma non è corretto per Windows 7. –

1

A seconda dello scopo, è possibile cercare una soluzione basata su driver. So che nVidia ha alcune librerie decenti che ti danno accesso alla maggior parte delle funzioni e al pannello di controllo.

+0

Questa è un'idea interessante, ma ho bisogno di qualcosa di più generale e non può dipendere da driver specifici. –

1

Hai effettuato due chiamate a EnumDisplayDevices? Prova qualcosa del tipo:

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

Ho fatto questo, ma da dove viene restituito il numero del monitor? –

+0

Cosa intendi per numero del monitor? Se citato "devMon", quindi inizia con devMon = 0, e crea devMon ++ nel "while" interno. – VitalyVal

+0

Ho aggiornato la domanda con un'immagine dei numeri del monitor che sto cercando. –

Problemi correlati