Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Monitor Seriennummer auslesen (https://www.delphipraxis.net/23913-monitor-seriennummer-auslesen.html)

Blinky 14. Jun 2004 08:17

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"

http://msdn.microsoft.com/library/de...re_classes.asp

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 :-).

bafoeg 14. Jun 2004 22:56

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

bafoeg 17. Jun 2004 06:30

Re: Monitor Seriennummer auslesen
 
Hallo zusammen,

hier: Webpage Title
Gibts z.B. das Tool zum auslesen der Ser.

Bafög

scp 27. Jun 2004 01:25

Re: Monitor Seriennummer auslesen
 
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.

bafoeg 8. Jul 2004 18:28

Re: Monitor Seriennummer auslesen
 
cool danke! :-D

andy65 3. Dez 2004 16:35

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:

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
Wie kann ich eine Word- oder DWord-variable in einen String umwandeln, so dass in diesem dann auch der Herrsteller oder die Seriennummer steht?

Gruss
Andy

supermuckl 3. Dez 2004 16:40

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

andy65 4. Dez 2004 08:18

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

Nothine 4. Dez 2004 11:09

Re: Monitor Seriennummer auslesen
 
Delphi-Quellcode:
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;
@andy65: für die von dir angegebenen 183 kommt allerdings 'AFX' raus :gruebel:

scp 24. Dez 2004 01:31

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:16 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz