程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> delphi技術專題---獲取網卡物理地址之內存獲取方式函數源碼

delphi技術專題---獲取網卡物理地址之內存獲取方式函數源碼

編輯:Delphi

先貼代碼: [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後的字符串即可。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved