如何获得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;
//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;
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;