在Delphi7内取网卡MAC地址

function GetMAC(CardNo: integer): string;
//CardNo指定多个网卡适配器中的哪一个0,1,2...
var
  NCB: TNCB; 
// Netbios control block file://NetBios控制块
  ADAPTER: TADAPTERSTATUS; // Netbios adapter status//取网卡状态
  LANAENUM: TLANAENUM; // Netbios lana
  intIdx: Integer; // Temporary work value//临时变量
  cRC: Char; // Netbios return code//NetBios返回值
  strTemp: string// Temporary string//临时变量
begin
  
// Initialize
  Result := '';
  
try
    // Zero control blocl
    ZeroMemory(@NCB, SizeOf(NCB));
    
// Issue enum command
    NCB.ncb_command := Chr(NCBENUM);
    cRC :
= NetBios(@NCB);
    
// Reissue enum command
    NCB.ncb_buffer := @LANAENUM;
    NCB.ncb_length :
= SizeOf(LANAENUM);
    cRC :
= NetBios(@NCB);
    
if Ord(cRC) <> 0 then Exit;
    
// Reset adapter
    ZeroMemory(@NCB, SizeOf(NCB));
    NCB.ncb_command :
= Chr(NCBRESET);
    NCB.ncb_lana_num :
= LANAENUM.lana[a];
    cRC :
= NetBios(@NCB);
    
if Ord(cRC) <> 0 then Exit;
    
// Get adapter address
    ZeroMemory(@NCB, SizeOf(NCB));
    NCB.ncb_command :
= Chr(NCBASTAT);
    NCB.ncb_lana_num :
= LANAENUM.lana[a];
    StrPCopy(NCB.ncb_callname, 
'*');
    NCB.ncb_buffer :
= @ADAPTER;
    NCB.ncb_length :
= SizeOf(ADAPTER);
    cRC :
= NetBios(@NCB);
    
// Convert it to string
    strTemp := '';
    
for intIdx := 0 to 5 do
      strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]), 2);
    Result :
= strTemp;
   
finally
   end;
end;

posted on 2007-07-12 07:36  martian6125  阅读(233)  评论(0编辑  收藏  举报