![]() |
CPU-ID Format / die 0 soll unterdrücken
Hallo
diese Funktion zeigt eine ID aber das kann nicht eine CPUID oder Hardware ID, da ich diese unter 2 PCs getestet habe. Ich bekomme immer die selbe ID !!! das kann nicht sein Wer kann mir einen anderen Code geben?
Delphi-Quellcode:
uses
HELLAPI, ...;
Delphi-Quellcode:
Gruß
function SerialNum(Fdrive: string) :String;
var serial: dword; dirlen,flags: dword; dlabel: array[0..11] of char; begin try getvolumeinformation(Pchar(Fdrive+':\'),dlabel,12,@serial,dirlen,flags,nil,0); result:= Inttohex(Serial,8); except result:= ''; end; end; procedure TForm1.Button1Click(Sender: TObject); var Fdrive: string; result:String; Serial: DWord; DirLen, Flags: DWord; DLabel : Array[0..11] of Char; begin Try //getvolumeinformation(Pchar(Fdrive+':\'),dlabel,12,@serial,dirlen,flags,nil,0); GetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0); Result := IntToHex(Serial,8); Form1.Caption:=Result; InputBox('Serial: ','Hardware-ID',Result) //http://www.forumweb.com.br/foruns/index.php?act=Print&client=printer&f=146&t=63127 Except Result := ''; end; end; procedure TForm1.Button2Click(Sender: TObject); var Fdrive: string; result:String; Serial: DWord; DirLen, Flags: DWord; DLabel : Array[0..11] of Char; begin Try //getvolumeinformation(Pchar(Fdrive+':\'),dlabel,12,@serial,dirlen,flags,nil,0); GetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0); Result := IntToHex(Serial,8); Form1.Caption:=Result; InputBox('Serial: ','Hardware-ID',Result) //http://www.forumweb.com.br/foruns/index.php?act=Print&client=printer&f=146&t=63127 Except Result := ''; end; end; function SerialNum(Fdrive: string) :String; var serial: dword; dirlen,flags: dword; dlabel: array[0..11] of char; begin try getvolumeinformation(Pchar(Fdrive+':\'),dlabel,12,@serial,dirlen,flags,nil,0); result:= Inttohex(Serial,8); except result:= ''; end; end; procedure TForm1.Button1Click(Sender: TObject); var Fdrive: string; result:String; Serial: DWord; DirLen, Flags: DWord; DLabel : Array[0..11] of Char; begin Try //getvolumeinformation(Pchar(Fdrive+':\'),dlabel,12,@serial,dirlen,flags,nil,0); GetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0); Result := IntToHex(Serial,8); Form1.Caption:=Result; InputBox('Serial: ','Hardware-ID',Result) //http://www.forumweb.com.br/foruns/index.php?act=Print&client=printer&f=146&t=63127 Except Result := ''; end; end; procedure TForm1.Button2Click(Sender: TObject); var Fdrive: string; result:String; Serial: DWord; DirLen, Flags: DWord; DLabel : Array[0..11] of Char; begin Try //getvolumeinformation(Pchar(Fdrive+':\'),dlabel,12,@serial,dirlen,flags,nil,0); GetVolumeInformation(PChar(FDrive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0); Result := IntToHex(Serial,8); Form1.Caption:=Result; InputBox('Serial: ','Hardware-ID',Result) //http://www.forumweb.com.br/foruns/index.php?act=Print&client=printer&f=146&t=63127 Except Result := ''; end; end; |
Re: CPU-ID mit diesem Code stimmt nicht !
Dieser Code soll die Serienummer der Festplatte auslesen. Da du aber nichtmal festlegst welche Festplatte kann dort auch nur müll herauskommen. Wenn man den Code schon irgendwoher klaut sollte man wenigstens halbwegs verstehn was darin passiert.
Setz mal FDrive := 'c'; davor... |
Re: CPU-ID mit diesem Code stimmt nicht !
Hi
ich habe den falschen Code gegeben, sorry Hier ist der Code
Delphi-Quellcode:
Die Frage: Warum zeigt der Code die CPU-ID so geteilt?
const
ID_BIT = $200000; // EFLAGS ID bit type TCPUID = array[1..4] of Longint; TVendor = array [0..11] of char; function IsCPUID_Available : Boolean; register; asm PUSHFD {direct access to flags no possible, only via stack} POP EAX {flags to EAX} MOV EDX,EAX {save current flags} XOR EAX,ID_BIT {not ID bit} PUSH EAX {onto stack} POPFD {from stack to flags, with not ID bit} PUSHFD {back to stack} POP EAX {get back to EAX} XOR EAX,EDX {check if ID bit affected} JZ @exit {no, CPUID not availavle} MOV AL,True {Result=True} @exit: end; function GetCPUID : TCPUID; assembler; register; asm PUSH EBX {Save affected register} PUSH EDI MOV EDI,EAX {@Resukt} MOV EAX,1 DW $A20F {CPUID Command} STOSD {CPUID[1]} MOV EAX,EBX STOSD {CPUID[2]} MOV EAX,ECX STOSD {CPUID[3]} MOV EAX,EDX STOSD {CPUID[4]} POP EDI {Restore registers} POP EBX end; function GetCPUVendor : TVendor; assembler; register; asm PUSH EBX {Save affected register} PUSH EDI MOV EDI,EAX {@Result (TVendor)} MOV EAX,0 DW $A20F {CPUID Command} MOV EAX,EBX XCHG EBX,ECX {save ECX result} MOV ECX,4 @1: STOSB SHR EAX,8 LOOP @1 MOV EAX,EDX MOV ECX,4 @2: STOSB SHR EAX,8 LOOP @2 MOV EAX,EBX MOV ECX,4 @3: STOSB SHR EAX,8 LOOP @3 POP EDI {Restore registers} POP EBX end; procedure TForm1.Button1Click(Sender: TObject); var CPUID : TCPUID; I : Integer; S : TVendor; begin for I := Low(CPUID) to High(CPUID) do CPUID[I] := -1; if IsCPUID_Available then begin CPUID := GetCPUID; Memo1.Lines.Add('CPUID[1] = ' + IntToHex(CPUID[1],8)); Memo1.Lines.Add('CPUID[2] = ' + IntToHex(CPUID[2],8)); Memo1.Lines.Add('CPUID[3] = ' + IntToHex(CPUID[3],8)); Memo1.Lines.Add( 'CPUID[4] = ' + IntToHex(CPUID[4],8)); Memo1.Lines.Add('PValue = '+ IntToStr(CPUID[1] shr 12 and 3)); Memo1.Lines.Add( 'FValue = '+IntToStr(CPUID[1] shr 8 and $f)); Memo1.Lines.Add( 'MValue = '+IntToStr(CPUID[1] shr 4 and $f)); Memo1.Lines.Add( 'SValue = '+IntToStr(CPUID[1] and $f)); S := GetCPUVendor; Memo1.Lines.Add( 'Vendor: ' + S); end else begin Memo1.Lines.Add( 'CPUID not available'); end; end; Ich habe einen anderes Programm zeigt die CPU ID wie folgt : 68C387F9FF der Code Oben zeigt aber die ID geteilt so : CPUID[1] = 0000068A CPUID[2] = 00000002 CPUID[3] = 00000000 CPUID[4] = 0387F9FF PValue = 0 FValue = 6 MValue = 8 SValue = 10 Vendor: GenuineIntel wie und wo muss ich den Code ändern, damit das Ergebnis bekomme: 68C387F9FF Ich meine wie addiere ich sie? Gruß |
Re: CPU-ID mit diesem Code stimmt nicht !
Wenn ich das richtig sehe, sind das
Delphi-Quellcode:
(CPUID[1] + CPUID[2]) shl 32 + CPUID[3] + CPUID[4]
|
Re: CPU-ID mit diesem Code stimmt nicht !
Zitat:
Gruß |
Re: CPU-ID mit diesem Code stimmt nicht !
Das musst Du doch wissen! Du hast nur gefragt, wie Du die einzelnen Werte zu dem gewünschten Wert addieren kannst.
|
Re: CPU-ID mit diesem Code stimmt nicht !
Hi
Es funktioniert Ich bekomme die erste Nummer "0" dies hat keine Bedeutung für mich und möchte gerne weglassen!
Delphi-Quellcode:
das Ergebnis ist leider nicht 100% wie ich wollte !
Edit1.Text:=(IntToHex((CPUID[1] + CPUID[2]),8) +IntToHex((CPUID[3]) + (CPUID[4]),8));
ich bekomme 0000068C0387F9FF statt 68C387F9FF !!! Wo liegt das Problem ? ich bekomme 5 die "0" vorne und "0" nach C ? ----------------- CPUID[1] = 0000068A CPUID[2] = 00000002 CPUID[3] = 00000000 CPUID[4] = 0387F9FF Gruß |
Re: CPU-ID Format / die 0 soll unterdrücken
Jemand hat folgendes vorgeschalgen um "0" vorne in bei jeder CPU zu löschen :
Delphi-Quellcode:
Hierbei ist x ein Array[1..4] of String, i ein integer.
For i := 1 To 4 Do
Begin While x[i][1] = '0' Do Delete(x[i], 1, 1); Memo1.Lines.Add(x[i]); End; ich habe den Teil wahrscheinlich in den falschen Bereich hinzugefügt, da ich Error bekomme ![]() Bitte wo soll der Teil sein In Code? Danke! Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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