- 註冊時間
 - 2006-3-13 
 - 最後登錄
 - 2025-7-23 
 - 在線時間
 - 675 小時 
 - 閱讀權限
 - 200 
 - 積分
 - 417 
 - 帖子
 - 1109 
 - 精華
 - 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.
 
  複製代碼 |   
 
  
 |