本文整理自网络,侵删。
uses NB30;
function GetMACAdress: TStringList;var NCB: PNCB; Adapter: PAdapterStatus;
URetCode: PChar; RetCode: char; I: integer; Lenum: PlanaEnum; _SystemID: string; TMPSTR: string;
begin Result := TStringList.create(); _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 := Char(Netbios(NCB));
try i := 0; repeat Fillchar(NCB^, SizeOf(TNCB), 0); Ncb.ncb_command := chr(NCBRESET); Ncb.ncb_lana_num := lenum.lana[I]; RetCode := Char(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 := Char(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);
if (_SystemID <> '00-00-00-00-00-00') and (Result.IndexOf(_SystemID)=-1) then Result.add(_SystemId); end; Inc(i); until (I >= Ord(Lenum.Length)); finally FreeMem(NCB); FreeMem(Adapter); FreeMem(Lenum); end;end;
procedure TForm1.Button1Click(Sender: TObject);
beginCaption:=GetMACAdress.Strings[0];end;
相关阅读 >>
Delphi yesterday、today、tomorrow - 昨天、今天、明天
Delphi ini文件操作 tinifile、tmeminifile
Delphi 10.3 中安装程序自动升级插件autoupgrader_pro_v5.2
更多相关阅读请进入《Delphi》频道 >>