如何准确的获得CPU序列号? ( 积分: 100 )

  • 主题发起人 主题发起人 fuyu1982815
  • 开始时间 开始时间
F

fuyu1982815

Unregistered / Unconfirmed
GUEST, unregistred user!
请问有谁能告诉我?我也找了其他的程序,但是每一台机器的取到的CPU序列号都是一样的为:-1075053569
程序如下:
procedure TForm1.GetCpuInfo;
var
R: array[0..255] of Char;
CpuID: Integer;
begin
FillChar(R, 20, 0);
asm
mov eax, 0
db 0fh, 0a2h
mov dword ptr R[0], ebx
mov dword ptr R[4], edx
mov dword ptr R[8], ecx
mov eax, 1
db 0fh, 0a2h
mov CpuID, edx
end;
ShowMessage('CPU制造商为:' + R + #13 + '序列号为:' + IntToStr(CpuID));
end;
 
难道是太简单了,都不愿意回答吗?
 
CPU系列号:
type
TCPUID= array[1..4] of Longint;

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 GetCPUIDStr:String;
var
CPUID:TCPUID;
begin
CPUID:=GetCPUID;
Result:=IntToHex(CPUID[1],8)+IntToHex(CPUID[2],8)+IntToHex(CPUID[3],8)+IntToHex(CPUID[4],8);
end

调用:
Edit1.text:=GetCPUIDStr;
 
谢谢delhpi,但是我用工具查出来的序列号是24位的,程序运行后是32位的,到底是不是对的啊?
 
所有X86处理器系列中只有PIII才支持序列号,后来由于安全方面的的考虑在以后系列中又取消了。可以去查一下INTEL的处理器指令手册,上面有说明。AMD的从来就没有支持序列号的。
可以这样取
mov eax,$01
dw $A20F
如果这个处理器支持序列号,那么此时EDX的低18位就是1,否则就是不支持序列号的。
如果支持的话,
mov eax,$03
dw $A20F
此时EDX,EAX合起来保存的就是处理器的序列号。64位的。
 
我哪里有这个水平,是复制别人的代码。
 
不过可以取出cpu的型号,同一系列cpu的型号是相同的。
 
我的代码是可以取出制造商
 
还有没有人知道啊?
 
谢谢大家
代码:
[:D]
 
分数已经给出了
 
Result:=IntToHex(CPUID[1],8)+IntToHex(CPUID[2],8)+IntToHex(CPUID[3],8)+IntToHex(CPUID[4],8);

8*3=24
8*4=32
 
这个取得CPU序列号的程序,取出来的序列号有重复的,有谁知道原因吗?
 

Similar threads

I
回复
0
查看
675
import
I
I
回复
0
查看
785
import
I
I
回复
0
查看
503
import
I
I
回复
0
查看
857
import
I
后退
顶部