AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Name vom Monitor abfragen

Ein Thema von BlueStarHH · begonnen am 18. Apr 2006 · letzter Beitrag vom 19. Apr 2006
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#1

Name vom Monitor abfragen

  Alt 18. Apr 2006, 16:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von Loki77
Loki77

Registriert seit: 21. Feb 2006
Ort: Trier
132 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Name vom Monitor abfragen

  Alt 18. Apr 2006, 16:40
Bin da letztens über GetDisplay oder so gestolpert, hab grad leider nicht die möglichkeit es zu prüfen...
(IMAPI)
"What I cannot create, I do not understand."
-Richard P. Feynman
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Name vom Monitor abfragen

  Alt 19. Apr 2006, 12:38
EnumDisplayDevices(), DISPLAY_DEVICE.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Name vom Monitor abfragen

  Alt 19. Apr 2006, 13:14
Zitat von Muetze1:
Das ist es leider nicht. Das gibt mir die Namen der Grafikkarten-Treiber zurück. Ich möchte den Monitor(-Treiber)-Namen haben.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Name vom Monitor abfragen

  Alt 19. Apr 2006, 16:00
Sorry, mein Fehler: GetMonitorInfo(), MONITORINFOEX

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:
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;
lbMonitorList = TListBox.

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 von MSDN EnumGetDisplayDevice():
To obtain information about a display monitor, first call EnumDisplayDevices with lpDevice set to NULL. The device name is returned in lpDisplayDevice. Use this value in lpDevice and set iDevNum to zero in a second call to EnumDisplayDevices. DISPLAY_DEVICE.DeviceString subsequently returns the monitor name.
/EDIT3:
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
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Name vom Monitor abfragen

  Alt 19. Apr 2006, 16:18
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz