先貼代碼: [delphi] {----------------------------------------------------------------------------\- 作者:sushengmiyan 2013.01.26 參數:Alana: Integer = 0 返回:string 功能:通過LANA號獲取Mac物理地址 (內存方式獲取),整體步驟如下: 一、枚舉系統上可用的所有LANA編號 二、重置計劃使用的每個LANA編號 三、適配器命令獲取網卡地址 \-----------------------------------------------------------------------------} function MemGetNetCardName(Alana: Integer = 0): string; var NCB: TNCB;//Netbios控制塊 AdapterStatus: TAdapterStatus;//取網卡狀態 LanaEnum: TLanaEnum; //LANA枚舉值 I: Integer; CRC: Char;//netBios返回值 begin Result := ''; Try { http://blog.csdn.net/sushengmiyan/article/details/8543811 一、枚舉LANA值 ①.申請分配一個TNCB結構 NCB: TNCB; ②.將TNCB結構變量初始化成O ZeroMemory(@NCB , SizeOf(NCB)); ③.置命令為NCBENUM NCB.ncb_Command := chr(NCBENUM); ④.為ncb_buffer分配LANA_ENUM NCB.ncb_buffer := @LANAENUM; ⑤.為NCB_length制定長度 NCB.NCB_length := Sizeof(LANAENUM); ⑥.調用Netbios函數獲取Netbios CRC := NetBios(@NCB); ⑦.返回值NRC_GOODRET表示成功 NCB.ncb_retcode = Chr(NRC_GOODRET) } ZeroMemory(@NCB , SizeOf(NCB)); NCB.ncb_Command := Chr(NCBENUM); NCB.ncb_buffer := @LANAENUM; NCB.NCB_length := Sizeof(LANAENUM); CRC := NetBios(@NCB); if not (NCB.ncb_retcode = Chr(NRC_GOODRET)) then Exit; { http://blog.csdn.net/sushengmiyan/article/details/8543811 二、重置計劃使用的每個LANA編號 ①.申請分配一個TNCB結構 NCB: TNCB; ②.將TNCB結構變量初始化成O ZeroMemory(@NCB , SizeOf(NCB)); ③.置命令為NCBRESET NCB.ncb_Command := chr(NCBRESET); ④.給命令設置LANA編號 NCB.ncb_lana_num := LanaEnum.lana[Alana]; ⑤.調用Netbios函數獲取Netbios CRC := NetBios(@NCB); ⑥.返回值NRC_GOODRET表示成功 NCB.ncb_retcode = Chr(NRC_GOODRET) } ZeroMemory(@NCB , SizeOf(NCB)); NCb.ncb_Command := Chr(NCBRESET); NCB.ncb_lana_num := LanaEnum.lana[Alana]; CRC := Netbios(@NCB); if not (NCB.ncb_retcode = Chr(NRC_GOODRET)) then Exit; { http://blog.csdn.net/sushengmiyan/article/details/8543811 三、使用TAdapterStatus結構獲取網卡地址 ①.申請分配一個TNCB結構 NCB: TNCB; ②.將TNCB結構變量初始化成O ZeroMemory(@NCB , SizeOf(NCB)); ③.置命令為NCBASTAT NCB.ncb_Command := chr(NCBASTAT); ④.為ncb_buffer分配LANA_ENUM NCB.ncb_buffer := @LANAENUM; ⑤.設置ncb_callname NCB.ncb_callname := '* ' + #0; ⑥.為ncb_buffer分配AdapterStatus NCB.ncb_buffer := @AdapterStatus; ⑦.為NCB_length制定長度 NCB.NCB_length := Sizeof(AdapterStatus); ⑧.調用Netbios函數獲取Netbios CRC := NetBios(@NCB); } ZeroMemory(@NCB , SizeOf(NCB)); NCb.ncb_Command := chr(NCBASTAT); NCB.ncb_lana_num := LANAENUM.lana[Alana]; NCB.ncb_callname := '* ' + #0; //不明白為何如此設置,*代表啥子? //有懂的可以郵件分享 [email protected] O(∩_∩)O謝謝 NCB.ncb_buffer := @AdapterStatus; NCB.ncb_length := SizeOf(AdapterStatus); CRC := NetBios(@NCB); //獲取形如AA-BB-CC-DD-EE-FF形式的mac物理地址字符串 Result := ''; for I := 0 to 5 do if SameStr(Result , '') then Result := Result + IntToHex(Integer(AdapterStatus.adapter_address[I]) , 2) else Result := Result + '-' + IntToHex(Integer(AdapterStatus.adapter_address[I]) , 2); Finally End; end; 關於理論方面的知識,前面已經介紹過了,如果遇到不明白的可以去前面幾篇文章查看,這裡面我也有不明白的,希望有明白的可以指教一下~O(∩_∩)O謝謝。 查看獲取的mac地址是否正確的方式: 在Windows 2000/XP/Vista/WIN8中 點擊 開始-運行-進入後輸入ipconfig /all 在出現的結果中查找‘物理地址’或者Physical Address後的字符串即可。