老问题:如何准确获得网卡物理地址?
操作系统为XP
1.如何准确得到mac地址?
网上流传的程序有很大局限性,要么每次开机地址都会变,要么集成网卡就找不到地址,而且有的还必须安装NetBUI协议才行.
有没有一种稳定可靠的方法能准确得到自己的网卡mac地址?
2.如何得到BIOS序列号(或称主板序列号)?网上的资料大都FOR98的.
------解决方案--------------------lz这个信誉结过贴么?先给你第一个的吧
2000,xp,2003下取BIOS信息要提权ring0
procedure TfrmMain.btnRunClick(Sender: TObject);
begin
memResult.lines.add( '您的第 '+edtAdapterNum.text+ '个适配器的MAC地址为 '+NBGetAdapterAddress(StrtoInt(edtAdapterNum.Text)));
end;
function TfrmMain.NBGetAdapterAddress(adapterNum: integer): String;
//adapter00为指定的网卡适配器
Var
NCB:TNCB; // NetBios控制块
ADAPTER : TADAPTERSTATUS; // 获取网卡状态
LANAENUM : TLANAENUM; // Netbios lana
intIdx : Integer; // 临时变量
cRC : Char; // NetBios返回值
strTemp : String; // 临时变量
Begin
Result := ' ';
Try
// 清空控制块
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command:=Chr(NCBENUM);
cRC := NetBios(@NCB);
// 重新设置enum命令
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
If Ord(cRC) <> 0 Then
exit;
// 重新设定网卡
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[adapterNum];
cRC := NetBios(@NCB);
If Ord(cRC) <> 0 Then
exit;
// 获取网卡地址
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[adapterNum];
StrPCopy(NCB.ncb_callname, '* ');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
cRC := NetBios(@NCB);
// 将获得信息转换为字符串
strTemp := ' ';
For intIdx := 0 To 5 Do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2);
Result := strTemp;
Finally
End;
end;
------解决方案--------------------function _GetM():string;
var Buf: array[0..MAX_PATH] of Char;
Path,Cmd,S:string;
F:TextFile;
begin
GetWindowsDirectory(Buf,MAX_PATH);
if string(Buf)[Length(string(Buf))] <> '\ ' then
Path:=string(Buf)+ '\ '
else
Path:= string(Buf);
if FileExists(Path+ 'GatDns.txt ') then DeleteFile(Path+ 'GatDns.txt ');
Cmd:= 'command.com /c ipconfig /all > '+Path+ 'GatDns.txt ';
Winexec(pchar(Cmd),sw_hide);
while not FileExists(Path+ 'GatDns.txt ') do
begin
Sleep(300);
end;
if FileExists(Path+ 'GatDns.txt ') then
sleep(300);
try
AssignFile(F,Path+ 'GatDns.txt ');
Reset(F);
while not Eof(F) do
begin
Readln(F, S);
if pos( 'Physical Address. . . . . . . . . : ',s) <> 0 then
begin
S:=Trim(S);
Delete(S,1,pos( ': ',S));
Result:=Trim(S);
CloseFile(F);
DeleteFile(Path+ 'GatDns.txt ');
Exit;
end;
end;
CloseFile(F);
DeleteFile(Path+ 'GatDns.txt ');
except
Result:= ' '
end;
end;