bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 Delphi Delphi 讀取硬體資訊
查看: 3269|回復: 1
go

Delphi 讀取硬體資訊 [複製鏈接]

Rank: 9Rank: 9Rank: 9

1#
發表於 2012-3-21 14:35 |只看該作者 |倒序瀏覽 |打印
取得 CPU 序號,不過在多核心環境會有多組序號
  1. unit HardwareInfo;

  2. interface

  3. uses
  4.   SysUtils;

  5. {取得CPU序號(多核心會有多個序號)}
  6. function GetCPUInfo: String;

  7. implementation

  8. function GetCPUInfo: String;
  9. type
  10.   TCPUID  = array[1..4] of Longint;
  11.   TVendor = array[0..11] of Char;

  12. var
  13.   CPUID: TCPUID;
  14.   I: Integer;
  15.   S: TVendor;

  16.   function GetCPUID: TCPUID; assembler; register;
  17.   asm
  18.     PUSH   EBX {Save affected register}
  19.     PUSH   EDI
  20.     MOV    EDI,EAX {@Resukt}
  21.     MOV    EAX,1
  22.     DW     $A20F {CPUID Command}
  23.     STOSD {CPUID[1]}
  24.     MOV    EAX,EBX
  25.     STOSD {CPUID[2]}
  26.     MOV    EAX,ECX
  27.     STOSD {CPUID[3]}
  28.     MOV    EAX,EDX
  29.     STOSD {CPUID[4]}
  30.     POP    EDI {Restore registers}
  31.     POP    EBX
  32.   end;

  33.   function GetCPUVendor: TVendor; assembler; register;
  34.   asm
  35.     PUSH   EBX {Save affected register}
  36.     PUSH   EDI
  37.     MOV    EDI,EAX {@Result (TVendor)}
  38.     MOV    EAX,0
  39.     DW     $A20F {CPUID Command}
  40.     MOV    EAX,EBX
  41.     XCHG   EBX,ECX {save ECX result}
  42.     MOV    ECX,4
  43.     @1:
  44.     STOSB
  45.     SHR    EAX,8
  46.     LOOP   @1
  47.     MOV    EAX,EDX
  48.     MOV    ECX,4
  49.     @2:
  50.     STOSB
  51.     SHR    EAX,8
  52.     LOOP   @2
  53.     MOV    EAX,EBX
  54.     MOV    ECX,4
  55.     @3:
  56.     STOSB
  57.     SHR    EAX,8
  58.     LOOP   @3
  59.     POP    EDI {Restore registers}
  60.     POP    EBX
  61.   end;
  62.   
  63.   function IsCPUID_Available : Boolean; register;
  64.   asm
  65.     PUSHFD
  66.     POP     EAX
  67.     MOV     EDX,EAX
  68.     XOR     EAX,$200000
  69.     PUSH    EAX
  70.     POPFD
  71.     PUSHFD
  72.     POP     EAX
  73.     XOR     EAX,EDX
  74.     JZ      @exit
  75.     MOV     AL,True
  76.     @exit:
  77.   end;

  78. begin
  79.   for I := Low(CPUID) to High(CPUID) do
  80.     CPUID[I] := -1;

  81.   CPUID := GetCPUID;
  82.   if IsCPUID_Available then
  83.   begin
  84.     S := GetCPUVendor;

  85.     Result := S +
  86.         IntToHex(CPUID[1], 8) +
  87.         IntToHex(CPUID[2], 8) +
  88.         IntToHex(CPUID[3], 8) +
  89.         IntToHex(CPUID[4], 8);
  90.   end else begin
  91.     Result := '0';
  92.   end;
  93. end;

  94. end.
複製代碼
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw

Rank: 9Rank: 9Rank: 9

2#
發表於 2012-3-21 14:36 |只看該作者
取得網路卡的 MAC Address 資訊
  1. unit HardwareInfo;

  2. interface

  3. uses
  4.   SysUtils, nb30;

  5. function GetAdapterInfo(Lana: Char): String;
  6. function GetMACAddress: string;

  7. implementation

  8. function GetAdapterInfo(Lana: Char): String;
  9. var
  10.   Adapter: TAdapterStatus;

  11.   NCB: TNCB;

  12. begin
  13.   FillChar(NCB, SizeOf(NCB), 0);
  14.   NCB.ncb_command := Char(NCBRESET);
  15.   NCB.ncb_lana_num := Lana;
  16.   if Netbios(@NCB) <> Char(NRC_GOODRET) then
  17.   begin
  18.     Result := 'mac not found';
  19.     Exit;
  20.   end;
  21.   FillChar(NCB, SizeOf(NCB), 0);
  22.   NCB.ncb_command := Char(NCBASTAT);
  23.   NCB.ncb_lana_num := Lana;
  24.   NCB.ncb_callname := '*';
  25.   FillChar(Adapter, SizeOf(Adapter), 0);
  26.   NCB.ncb_buffer := @Adapter;
  27.   NCB.ncb_length := SizeOf(Adapter);
  28.   if Netbios(@NCB) <> Char(NRC_GOODRET) then
  29.   begin
  30.     Result := 'mac not found';
  31.     Exit;
  32.   end;
  33.   Result :=
  34.       IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +
  35.       IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' +
  36.       IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' +
  37.       IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' +
  38.       IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' +
  39.       IntToHex(Byte(Adapter.adapter_address[5]), 2);
  40. end;

  41. function GetMACAddress: string;
  42. var
  43.   AdapterList: TLanaEnum;
  44.   NCB: TNCB;
  45. begin  
  46.   FillChar(NCB, SizeOf(NCB), 0);
  47.   NCB.ncb_command := Char(NCBENUM);
  48.   NCB.ncb_buffer := @AdapterList;
  49.   NCB.ncb_length := SizeOf(AdapterList);
  50.   Netbios(@NCB);
  51.   if Byte(AdapterList.length) > 0 then
  52.     Result := GetAdapterInfo(AdapterList.lana[0])
  53.   else
  54.     Result := 'mac not found';
  55. end;

  56. end.
複製代碼
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw
‹ 上一主題|下一主題

Archiver|怕失憶論壇

GMT+8, 2024-4-26 00:27 , Processed in 0.010164 second(s), 10 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.