adminysh

[网络类] delphi中怎么获得本机MAC地址

可以用以下函数:

uses NB30;


function GetMACAdress: string; //uses NB30; 

var 

NCB: PNCB; 

Adapter: PAdapterStatus; 

URetCode: PChar; 

RetCode: char; 

I: integer; 

Lenum: PlanaEnum; 

_SystemID: string; 

TMPSTR: string; 

begin 

Result := ''; 

_SystemID := ''; 

Getmem(NCB, SizeOf(TNCB)); 

Fillchar(NCB^, SizeOf(TNCB), 0); 


Getmem(Lenum, SizeOf(TLanaEnum)); 

Fillchar(Lenum^, SizeOf(TLanaEnum), 0); 


Getmem(Adapter, SizeOf(TAdapterStatus)); 

Fillchar(Adapter^, SizeOf(TAdapterStatus), 0); 


Lenum.Length := chr(0); 

NCB.ncb_command := chr(NCBENUM); 

NCB.ncb_buffer := Pointer(Lenum); 

NCB.ncb_length := SizeOf(Lenum); 

RetCode := Netbios(NCB); 


i := 0; 

repeat 

Fillchar(NCB^, SizeOf(TNCB), 0); 

Ncb.ncb_command := chr(NCBRESET); 

Ncb.ncb_lana_num := lenum.lana[I]; 

RetCode := Netbios(Ncb); 


Fillchar(NCB^, SizeOf(TNCB), 0); 

Ncb.ncb_command := chr(NCBASTAT); 

Ncb.ncb_lana_num := lenum.lana[I]; 

// Must be 16 

Ncb.ncb_callname := ('*'); 


Ncb.ncb_buffer := Pointer(Adapter); 


Ncb.ncb_length := SizeOf(TAdapterStatus); 

RetCode := Netbios(Ncb); 

//---- calc _systemId from mac-address[2-5] XOR mac-address[1]... 

if (RetCode = chr(0)) or (RetCode = chr(6)) then 

begin 

_SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' + 

IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' + 

IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' + 

IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' + 

IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' + 

IntToHex(Ord(Adapter.adapter_address[5]), 2); 

end; 

Inc(i); 

until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00'); 

FreeMem(NCB); 

FreeMem(Adapter); 

FreeMem(Lenum); 

GetMacAdress := _SystemID; 

end;


procedure TForm1.Button1Click(Sender: TObject);

var

   wxymac : String;

begin

   wxymac:=GetMACAdress;

end;

#1楼
发帖时间:2014-4-22   |   查看数:0   |   回复数:0
游客组