![]() |
Re: Monitor Seriennummer auslesen
Hallo bafoeg, hallo erstmal zusammen :-)
dem ist genauso wie du vermutet hast. Die EDID entspricht meines Wissens nach dem - was der Monitor via DDC beim Boot dem Betriebssystem mitteilt - (Danke Chris, waren fast zeitgleich). Ein auslesen via WMI wäre die einfachste Methode, dies war jedoch in meinem Fall nicht möglich. Da sich bei unseren Maschinen auf diesem Key zusätzlich ein fehlerhafter Eintrag befindet, der sich nicht einfach so auf sichere Weise löschen lässt (bei der Anzahl von Maschienen) - habe ich diesen Lösungsweg gewählt (Die WMI Funktion lieferte immer einen Leeren Wert). Durch ein auslesen direkt via DDC würde man wohl die aktuellesten Informationen kriegen, diese konnte ich jedoch nicht realisieren, aber wäre sicher sehr interessant. Einfach wenn du eine Monitor Switchbox dazwischengeschaltet hast, liefert diese unter umständen das DDC Signal nicht weiter. Falls es dir etwas weiterhilft, hier einen Link zu Microsoft "WMI\computer_system_hardware_classes" ![]() Gruss Blinky als bisheriger nur Leser der "Delphi-Praxis" möchte ich mich mal bei allen hier bedanken, habe ich hier doch schon so mache Info und Hilfe entdeckt :-). |
Re: Monitor Seriennummer auslesen
Hallo zusammen!
ich werde versuchen DDC auszuprobieren. Nur stelle ich mir dann die Frage, wie die div. Sharewaretools das auch während des laufenden Betriebes anstellen, und nicht nur beim booten :gruebel: Wenn ich mir die MSDN Library durchsuche finde ich unter: - Win32_VideoConfiguration - Win32_DisplayConfiguration - Win32_DisplayControllerConfiguration Zwar schon einige Infos, aber leider keine, wie man die Serial auslesen kann...habe ich da was überlesen?? Bafög |
Re: Monitor Seriennummer auslesen
|
Re: Monitor Seriennummer auslesen
Für alle, die sich für den EDID header interessieren,
![]()
Delphi-Quellcode:
Jetzt muss man nur noch die Binärdaten aus der Registry auslesen und in eine Variable dieses Typs schleusen.
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; 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. |
Re: Monitor Seriennummer auslesen
cool danke! :-D
|
Re: Monitor Seriennummer auslesen
Hallo
Ich kann die EDID Informationen aus der Registry auslesen. Es gelingt mir auch die rein numerischen Werte auszulesen. Wo ich aber im Moment überhaupt nicht weiter komme ist bei Zitat:
Gruss Andy |
Re: Monitor Seriennummer auslesen
Herzlich Willkommen
Dword ist DoubleWord und das ist eine "Zahl" Wie der Delphi OH zu entnehmen: Type Range Format Integer ?2147483648..2147483647 signed 32-bit Cardinal 0..4294967295 unsigned 32-bit Fundamental integer types include Shortint, Smallint, Longint, Int64, Byte, Word, and Longword. Type Range Format Shortint ?128..127 signed 8-bit Smallint ?32768..32767 signed 16-bit Longint ?2147483648..2147483647 signed 32-bit Int64 ?2^63..2^63?1 signed 64-bit Byte 0..255 unsigned 8-bit Word 0..65535 unsigned 16-bit Longword 0..4294967295 unsigned 32-bit also einfach inttostr(variable als longword) und du hast deinen string wenn das allerdings noch kodiert ist, dann musst du das noch umwandeln |
Re: Monitor Seriennummer auslesen
Hallo supermuckel
Ganz so einfach ist es leider nicht! wenn ich z.B. Das Feld VendorId nehme erhalte ich mit IntToStr 183 als Rückgabewert. Ich sollte aber 3 Zeichne, auf meinem PC 'SAM' für Samsung, zurückbekommen. Ich muss also diesen Wert irgendwie Bitweise auftrennen, damit ich an die einzelnen Zeichen komme und da fehlt mir im Moment der Lösungsweg. Gruss Andy |
Re: Monitor Seriennummer auslesen
Delphi-Quellcode:
@andy65: für die von dir angegebenen 183 kommt allerdings 'AFX' raus :gruebel:
function _5BitsToChr(Vendor: Word): Char;
asm AND EAX,$1F ADD EAX,$41 end; function GetVendorString(VendorID: Word): string; begin SetLength(Result,3); Result := _5BitsToChr(VendorID shr $A) + //bits 14-10 _5BitsToChr(VendorID shr $5) + //bits 9- 5 _5BitsToChr(VendorID); //bits 4- 0 end; |
Re: Monitor Seriennummer auslesen
Kram aus....
Die Bytes müssen vorher verdreht werden, dann haut es hin.
Delphi-Quellcode:
function VendorLetters(vid : word) : String;
begin vid := ((vid and $00FF) shl 8) + ((vid and $FF00) shr 8); result := Chr(((vid and $7C00) shr 10) + $40) + Chr(((vid and $03E0) shr 5) + $40) + Chr(((vid and $001F) ) + $40); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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