![]() |
EDID REG_BINARY als String ausgeben
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich bin schon den ganzen Tag zu gange, um die EDID des aktuellen Monitors auszulesen. Unter SYSTEM\CurrentControlSet\Enum\DISPLAY\DEL4042\5&2c c4d7f7&0&UID259\Device Parameters\EDID kann man die Werte(Monitorname & Serial) sehen. Siehe Anhang. Wie schaffe ich es den REG_BINARY als String auszugeben? Zum Beispiel so: 00 FF FF FF FF oder 00,FF,FF,FF,FF. Wenn ich das hinbekomme, kann ich die Werte auslesen. Einfach die HEX Werte in Strings umwandeln. Ich habe auch schon folgendes gefunden.
Delphi-Quellcode:
Aber da erhalte ich Werte, die ich nicht verstehe.
type
TEDIDHeader = record Padding : array[1..8] of Byte; VendorID : Word; // bits 14 - 10 first letter (01h='A', 02h='B', etc.) // bits 9 - 5 second letter // bits 4 - 0 third letter ProductID : Word; SerialNo : DWord; // serial number or FFFFFFFFh // for "MAG", subtract 7000000 to get actual serial number // for "OQI", subtract 456150000 // for "PHL", subtract ??? // for "VSC", subtract 640000000 ManufactureWeek : Byte; ManufactureYear : Byte; // manufacture year - 1990 EDIDversion : Byte; EDIDrevision : Byte; VideoInputType : Byte; SizeHorizontal : Byte; // in cm SizeVertical : Byte; // in cm GammaFactor : Byte; // gamma factor (gamma = 1.0 + factor/100, so max = 3.55) DPMSflags : Byte; ChromaXYgreenred : Byte; ChromaXYwhiteblue : Byte; ChromaXred : Byte; ChromaYred : Byte; ChromaXgreen : Byte; ChromaYgreen : Byte; ChromaXblue : Byte; ChromaYblue : Byte; ChromaXwhite : Byte; ChromaYwhite : Byte; EstablishedTimings1 : Byte; EstablishedTimings2 : Byte; ManufacturersReservedTiming : Byte; StandardTimingIdentification : array[1..8] Of Word; DetailedTimingDescription1 : array[1..18] Of Byte; DetailedTimingDescription2 : array[1..18] Of Byte; DetailedTimingDescription3 : array[1..18] Of Byte; DetailedTimingDescription4 : array[1..18] Of Byte; Unused : Byte; Checksum : Byte; end; Zum Beispiel für die Serial. Manuell aus der Registry: G449H871775U. Mit dem Record erhalte ich mit folgendem Code xxx für die Serial 13653.
Delphi-Quellcode:
Vielen Dank im Voraus.
procedure Tfrm_main.btn_auslesenClick(Sender: TObject);
var reg : TRegistry; EDID : TEDIDHeader; begin reg := TRegistry.Create; with reg do begin Rootkey:=HKEY_LOCAL_MACHINE; //Hauptschlüssel if RegistryConnect('\\'+GetEnvironmentVariable('COMPUTERNAME')) = True then begin if OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\Display\DEL4042\5&4463ccd&0&UID16806659\Device Parameters') then begin ReadBinaryData('EDID', EDID, SizeOf(EDID)); end; end; end; reg.Free; memo.Clear; memo.Lines.Add(IntToStr(EDID.VendorID)); memo.Lines.Add(IntToStr(EDID.ProductID)); memo.Lines.Add(VendorLetters(EDID.SerialNo)); end; Sven |
AW: EDID REG_BINARY als String ausgeben
![]() Den Record würde ich sicherheitshalber als packed anlegen.
Delphi-Quellcode:
.
TEDIDHeader = record
Wie groß sind denn der Record (SizeOf) und das Binary-Feld in der Registry? Zitat:
Ich glaub aber nicht, daß der Record überhaupt stimmt, denn deine "Serialnummer" scheint in den DetailedTimingDescription drinzustehn, wenn ich richtig gezählt hab. |
AW: EDID REG_BINARY als String ausgeben
Irgendwie komme ich nicht weiter. Ok, dann vergessen wir das Record.
Wie kann ich die Werte aus dem REG_BINARY Feld in einen String scheiben? Format: 00 FF 4C 48 ... oder 00,FF,4C,48 ... Ich hoffe einer von Euch kann mir da helfen. Gruß, Sven |
AW: EDID REG_BINARY als String ausgeben
Delphi-Quellcode:
var
s,s2:AnsiString; size:Integer; i:Integer; begin //...SNIP SetLength(s,100000); size := reg.ReadBinaryData('EDID', s[1], 100000); SetLength(s,size); for I := 1 to Length(s) do s2 := s2 + IntToHex(Ord(s[i]),2); //...SNIP end; |
AW: EDID REG_BINARY als String ausgeben
Gibt es einen speziellen Grund hier nicht die Setup API zu benutzen um an die Gerätedaten zu kommen, so wie es usus ist?
|
AW: EDID REG_BINARY als String ausgeben
Es gibt keinen wirklichen Grund. Nur das ich es nicht weiß. Desweiteren können es unterschiedliche Modelle sein.
Ich werde erstmal die Lösung von Bummi versuchen. In der Registry steht halt alles. Interessieren würde mich es aber auch, wie es über die API geht? Danke im voraus. Sven |
AW: EDID REG_BINARY als String ausgeben
@bummi: genial, dass ist die Lösung.
Danke auch an alle anderen. Das Forum ist der Hammer. Schönes WE. Sven |
AW: EDID REG_BINARY als String ausgeben
Zitat:
Nja, das Problem mit der Registry ist aber, daß sich deren Format im nächsten Windows schnell mal ändern kann. Bei einer offiziellen API hättest du da weniger Probleme. |
AW: EDID REG_BINARY als String ausgeben
Zitat:
Wobei es bei den API-Befehlen in dem Bereiche Windows 2000 bis Windows 7 schon einige Unterschiede gibt.(z.B. ![]() |
AW: EDID REG_BINARY als String ausgeben
Danke für die Anregungen.
Für meine Zwecke reicht die Registry völlig aus. Danke nochmal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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