- 註冊時間
- 2006-3-13
- 最後登錄
- 2025-1-10
- 在線時間
- 673 小時
- 閱讀權限
- 200
- 積分
- 417
- 帖子
- 1107
- 精華
- 0
- UID
- 2
  
|
取得 CPU 序號,不過在多核心環境會有多組序號- unit HardwareInfo;
- interface
- uses
- SysUtils;
- {取得CPU序號(多核心會有多個序號)}
- function GetCPUInfo: String;
- implementation
- function GetCPUInfo: String;
- type
- TCPUID = array[1..4] of Longint;
- TVendor = array[0..11] of Char;
- var
- CPUID: TCPUID;
- I: Integer;
- S: TVendor;
- 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;
-
- function IsCPUID_Available : Boolean; register;
- asm
- PUSHFD
- POP EAX
- MOV EDX,EAX
- XOR EAX,$200000
- PUSH EAX
- POPFD
- PUSHFD
- POP EAX
- XOR EAX,EDX
- JZ @exit
- MOV AL,True
- @exit:
- end;
- begin
- for I := Low(CPUID) to High(CPUID) do
- CPUID[I] := -1;
- CPUID := GetCPUID;
- if IsCPUID_Available then
- begin
- S := GetCPUVendor;
- Result := S +
- IntToHex(CPUID[1], 8) +
- IntToHex(CPUID[2], 8) +
- IntToHex(CPUID[3], 8) +
- IntToHex(CPUID[4], 8);
- end else begin
- Result := '0';
- end;
- end;
- end.
複製代碼 |
|