Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CPU-ID Format / die 0 soll unterdrücken (https://www.delphipraxis.net/98299-cpu-id-format-die-0-soll-unterdruecken.html)

taktaky 24. Aug 2007 15:19


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:
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;
Gruß

christian_u 24. Aug 2007 15:36

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

taktaky 24. Aug 2007 17:40

Re: CPU-ID mit diesem Code stimmt nicht !
 
Hi

ich habe den falschen Code gegeben, sorry

Hier ist der Code


Delphi-Quellcode:
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;
Die Frage: Warum zeigt der Code die CPU-ID so geteilt?
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ß

DeddyH 24. Aug 2007 19:25

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]

taktaky 24. Aug 2007 19:46

Re: CPU-ID mit diesem Code stimmt nicht !
 
Zitat:

Zitat von DeddyH
Wenn ich das richtig sehe, sind das
Delphi-Quellcode:
(CPUID[1] + CPUID[2]) shl 32 + CPUID[3] + CPUID[4]

Wo soll das hin?

Gruß

DeddyH 24. Aug 2007 20:01

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.

taktaky 24. Aug 2007 20:20

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:
Edit1.Text:=(IntToHex((CPUID[1] + CPUID[2]),8) +IntToHex((CPUID[3]) + (CPUID[4]),8));
das Ergebnis ist leider nicht 100% wie ich wollte !
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ß

taktaky 24. Aug 2007 23:58

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:
    For i := 1 To 4 Do
    Begin
        While x[i][1] = '0' Do
            Delete(x[i], 1, 1);
        Memo1.Lines.Add(x[i]);
    End;
Hierbei ist x ein Array[1..4] of String, i ein integer.

ich habe den Teil wahrscheinlich in den falschen Bereich hinzugefügt, da ich Error bekomme

http://www.members.lycos.co.uk/forfo...uid-format.jpg


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