Für alle, die sich für den EDID header interessieren,
hier gibt es die Spezifikation. Der Header würde in Delphi also so aussehen:
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;
Jetzt muss man nur noch die Binärdaten aus der Registry auslesen und in eine Variable dieses Typs schleusen.
EDIT:
Es gibt mehrere Spezifikationen (1.0, 1.1, 1.2, 1.3 und 2.0) die leicht voneinander abweichen. Besonders zu beachten ist, das v2.0 aus 256 bytes besteht, daher immer nur die ersten 128 bytes kopieren oder ein Reserverd : array[1..128] Of Byte an den Header anhängen.