以下方法还是通过汇编实现,不过针对x64做了调整,以支持x86和x64两种环境,代码如下:
// 获取cpu序列号 type TCPUID = array [1 .. 4] of Longint; function GetCPUID: TCPUID; asm {$IF Defined(CPUX86)} push ebx push edi mov edi, eax mov eax, 1 dw $A20F stosd mov eax, ebx stosd mov eax, ecx stosd mov eax, edx stosd pop edi pop ebx {$ELSEIF Defined(CPUX64)} PUSH RBX PUSH RDI MOV RDI,RCX MOV EAX,1 CPUID mov [rdi], eax; mov [rdi+4], ebx; mov [rdi+8], ecx; mov [rdi+12], edx; POP RDI POP RBX {$IFEND} (* 调用示例 var id: TCPUID; id := GetCPUID; ShowMessage(IntToHex(id[4], 8) + IntToHex(id[1], 8)); *) end;
最后注释里是使用示例,在d10.1up2中测试通过。