如何获得cpu,mac,硬盘号等硬件信息?
//GetIp
function LocalIP : string; 
type 
    TaPInAddr = array [0..10] of PInAddr; 
    PaPInAddr = ^TaPInAddr; 
var 
    phe  : PHostEnt; 
    pptr : PaPInAddr; 
    Buffer : array [0..63] of char; 
    I    : Integer; 
    GInitData      : TWSADATA; 
begin 
    WSAStartup($101, GInitData); 
    Result := ``; 
    GetHostName(Buffer, SizeOf(Buffer)); 
    phe :=GetHostByName(buffer); 
    if phe = nil then Exit; 
    pptr := PaPInAddr(Phe^.h_addr_list); 
    I := 0; 
    while pptr^[I] <> nil do begin 
      result:=StrPas(inet_ntoa(pptr^[I]^)); 
      Inc(I); 
    end; 
    WSACleanup; 
end;function TCpuInfo.GetCPUID: string;
begin
{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;}
  Result := IntToHex(FEAXValue, 8) + '-' + IntToHex(FEBXValue, 8) + '-' + IntToHex(FECXValue, 8) + '-' + IntToHex(FEDXValue, 8)
end;function GetCpuId:longint;
var
  temp:longint;
begin
  asm
    PUSH    EBX
    PUSH    EDI
    MOV     EDI,EAX
    MOV     EAX,1
    DW      $A20F
    MOV     TEMP,EDX
    POP     EDI
    POP     EBX
  end;
  result:=temp;
end;

解决方案 »

  1.   

    以上是我搜集到的,不知道有没有更简单的方法,或者用API.
      

  2.   

    就用那些方法,你把它放在公共函数单元,就是你自己的API啦
      

  3.   

    获取CPUID没有比你上面更好的办法了...
      

  4.   

    这个是获取MAC的,我不知道是不是最好function TMainForm.GetMacAddress: String;
    var
      i: integer;
      s: String;function NBGetAdapterAddress(a: integer):String;
    var
      NC:TNCB;// Netbios control block file://NetBios控制块
      ADAPTE : TADAPTERSTATUS;//取得网卡状态
      LANAENU : TLANAENUM;// Netbios lana
      intId : Integer;// Temporary work value//临时变量
      cR : Char;// Netbios return code//NetBios返回值
      strTem : String;// Temporary string//临时变量begin
      Result := '';// Initialize
      Try
        // Zero control block
        ZeroMemory(@NC, SizeOf(NC));
        // Issue enum command
        NC.ncb_command:=Chr(NCBENUM);
        cR := NetBios(@NC);
        // Reissue enum command
        NC.ncb_buffer := @LANAENU;
        NC.ncb_length := SizeOf(LANAENU);
        cR := NetBios(@NC);
        If Ord(cR)<>0 Then
          exit;
        // Reset adapter
        ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBRESET);
        NC.ncb_lana_num := LANAENU.lana[a];
        cR := NetBios(@NC);
        If Ord(cR)<>0 Then
          exit;
        // Get adapter address
        ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBASTAT);
        NC.ncb_lana_num := LANAENU.lana[a];
        StrPCopy(NC.ncb_callname, '*');
        NC.ncb_buffer := @ADAPTE;
        NC.ncb_length := SizeOf(ADAPTE);
        cR := NetBios(@NC);
        // Convert it to string
        strTem := '';
        For intId := 0 To 5 Do
          strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]),2);
        Result := strTem;
      finally
      end;
    end;
    begin
      for i:=1 to 20 do
      begin
      s:=NBGetAdapterAddress(i);
        if s<>'' then
        begin
          Result:= s;
          exit;//退出循环
        end;
      end;
      Application.MessageBox('您的机器没有安装网络适配器!','提示',0);
    end;