Einzelnen Beitrag anzeigen

Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

EDID REG_BINARY als String ausgeben

  Alt 27. Jan 2011, 22:24
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
Miniaturansicht angehängter Grafiken
edid.png  
  Mit Zitat antworten Zitat