![]() |
Name vom Monitor abfragen
Wie kann ich den Namen vom aktuell verwendeten Monitor(-Treiber) abfragen? Dieser Name wird angezeigt wenn man mit der rechten Maustaste auf den Desktop klickt, dort im Menü "Eigenschaften" auswählt und dann unter "Einstellungen > Erweitert > Monitor > Monitortyp" nachschaut. Ich habe schon herausgefunden, dass dieser Name in der Registry unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\D ISPLAY\XXXXX steht. Doch stehen dort auch andere Monitore, die mal mit dem PC verbunden waren oder die Standardmonitore. Wie kann ich da die aktuell verwendeten herausfinden? Muss das über die Registry gehen oder gibt es da API-Funktionen dafür? Windows XP würde mir reichen.
|
Re: Name vom Monitor abfragen
Bin da letztens über GetDisplay oder so gestolpert, hab grad leider nicht die möglichkeit es zu prüfen...
(IMAPI) |
Re: Name vom Monitor abfragen
|
Re: Name vom Monitor abfragen
Zitat:
|
Re: Name vom Monitor abfragen
Sorry, mein Fehler:
![]() ![]() EDIT: so, nochmal und endgültig nachgeschaut, es wird doch vom vorherigen EnumDisplayDevices() zurück gegeben, da du anstatt NIL im ersten Parameter den richtigen Device String (spezifisch) angeben musst (den Adapternamen) und dann bekommste die Info zu dem dort angeschlossenen Monitor. Hier nun mein alter Code dazu:
Delphi-Quellcode:
lbMonitorList = TListBox.
Procedure TForm1.FillMonitorList;
Var Cntr : Cardinal; Info : TDisplayDevice; AdapterName : PChar; OldPos : Integer; Const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = $00000001; DISPLAY_DEVICE_MULTI_DRIVER = $00000002; DISPLAY_DEVICE_PRIMARY_DEVICE = $00000004; DISPLAY_DEVICE_MIRRORING_DRIVER = $00000008; DISPLAY_DEVICE_VGA = $00000010; Begin lbMonitorList.Items.Add('------------------ Displays ----------------'); Cntr := 0; Info.cb := SizeOf(Info); While EnumDisplayDevices(Nil, Cntr, Info, 0) Do Begin lbMonitorList.Items.Add('* Device '+IntToStr(Cntr)+':'); lbMonitorList.Items.Add(' DeviceName : '+Info.DeviceName); lbMonitorList.Items.Add(' DeviceString: '+Info.DeviceString); OldPos := lbMonitorList.Items.Add(' StateFlags: '); If ( Info.StateFlags And DISPLAY_DEVICE_ATTACHED_TO_DESKTOP ) = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP Then lbMonitorList.Items.Add(' + Display Device Attached To Desktop') Else lbMonitorList.Items.Add(' - Display Device Attached To Desktop'); If ( Info.StateFlags And DISPLAY_DEVICE_MULTI_DRIVER ) = DISPLAY_DEVICE_MULTI_DRIVER Then lbMonitorList.Items.Add(' + Display Device Multi Driver') Else lbMonitorList.Items.Add(' - Display Device Multi Driver'); If ( Info.StateFlags And DISPLAY_DEVICE_PRIMARY_DEVICE ) = DISPLAY_DEVICE_PRIMARY_DEVICE Then lbMonitorList.Items.Add(' + Display Device Primary Device') Else lbMonitorList.Items.Add(' - Display Device Primary Device'); If ( Info.StateFlags And DISPLAY_DEVICE_MIRRORING_DRIVER ) = DISPLAY_DEVICE_MIRRORING_DRIVER Then lbMonitorList.Items.Add(' + Display Device Mirroring Driver') Else lbMonitorList.Items.Add(' - Display Device Mirroring Driver'); If ( Info.StateFlags And DISPLAY_DEVICE_VGA ) = DISPLAY_DEVICE_VGA Then lbMonitorList.Items.Add(' + Display Device VGA') Else lbMonitorList.Items.Add(' - Display Device VGA'); AdapterName := StrAlloc(SizeOf(Info.DeviceName)); StrCopy(AdapterName, Info.DeviceName); EnumDisplayDevices(AdapterName, 0, Info, 0); lbMonitorList.Items.Insert(OldPos, ' Monitorname : ' + Info.DeviceString); StrDispose(AdapterName); Inc(Cntr); End; End; Der Code ist sehr alt und daher werkelt der noch mit StrAlloc(), StrCopy() und StrDispose() anstatt mit SetLength() und AnsiStrings. Es fehlen try/finally Blöcke, etc - aber das umzusetzen sollte ja nicht das Problem sein. /EDIT2: Wie auch in der MSDN zu lesen war auf der oben verlinkten EnumDisplayDevices(): Zitat:
Mein geposteter Code geht immer fest von nur einem Monitor pro Device aus. Bei manchen Karten (z.B. Matrox Karten im "nicht-Windows" MultiMon Betrieb oder auch Dual Link-DVI Karten für übergrosse LCD/TFTs (Apple's 30"er z.B.)) sollten hier auch mehr als einen Monitor pro Device liefern. Um diese auch zu erhalten, einfach eine Schleife basteln um den zweiten EnumDisplayDevices() Aufruf am Ende in der While Schleife. /EDIT4: ... und dabei nicht vergessen die Variable (2. Parameter) pro Aufruf zu inkrementieren. MfG Muetze1 |
Re: Name vom Monitor abfragen
Alles was unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum steht kann immer auch mit SetupDi-funktionen aus dem Setup API aufgezaehlt werden.
Die Unterschluessel wie DISPLAY benennen dabei einen Bus (der virtuell sein kann). Ich vermute mal das EnumDisplayDevices intern schlicht auf den SetupDi-Funktionen aufsetzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz