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 GetComputerSeries: string;
var
//I: Integer;
//nNum: Longint;
CPUID: TCPUID;
begin
Result := '';
CPUID := GetCPUID;
Result := IntToHex(CPUID[1] , 8) + IntToHex(CPUID[2] , 8) + IntToHex(CPUID[3]
, 8) + IntToHex(CPUID[4] , 8);
end;
procedure SetCPU(h: THandle;CpuNo: Integer);
//CpuNo:决定了获得第几个cpu内核的第几个序列号。
var
ProcessAffinity: Cardinal;
_SystemAffinity: Cardinal;
begin
GetProcessAffinityMask(h, ProcessAffinity, _SystemAffinity) ;
ProcessAffinity := CpuNo; //this sets the process to only run on CPU 0
//for CPU 1 only use 2 and for CPUs 1 & 2 use 3
SetProcessAffinityMask(h, ProcessAffinity)
end;
//调用
var s:string;
begin
SetCPU(GetCurrentProcess,1);//取第一个核的cpuID,没这句会随机取得到的结果有误差
s:=GetComputerSeries;
end;