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:
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;
Aber da erhalte ich Werte, die ich nicht verstehe.
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:
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;
Vielen Dank im Voraus.
Sven