Start New Discussion within our Software Development Community

In case there are mote than one NIC (Network Interface Card) the coe gives the MAC of the first adapter. You can change the 0 on the line qoted below to take the MAC of other NICs if present.

"Result := GetAdapterInfo(AdapterList.lana[0]) "

uses NB30;

function GetAdapterInfo(Lana: Char): String;
var
 Adapter: TAdapterStatus;
 NCB: TNCB;
begin
 FillChar(NCB, SizeOf(NCB), 0);
 NCB.ncb_command := Char(NCBRESET);
 NCB.ncb_lana_num := Lana;
 if Netbios(@NCB) <> Char(NRC_GOODRET) then
 begin
   Result := 'mac not found';
   Exit;
 end;

 FillChar(NCB, SizeOf(NCB), 0); 
 NCB.ncb_command := Char(NCBASTAT); 
 NCB.ncb_lana_num := Lana; 
 NCB.ncb_callname := '*'; 

 FillChar(Adapter, SizeOf(Adapter), 0);
 NCB.ncb_buffer := @Adapter; 
 NCB.ncb_length := SizeOf(Adapter); 
 if Netbios(@NCB) <> Char(NRC_GOODRET) then 
 begin 
   Result := 'mac not found'; 
   Exit; 
 end; 
 Result := 
   IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +
   IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' + 
   IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' + 
   IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' + 
   IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' + 
   IntToHex(Byte(Adapter.adapter_address[5]), 2); 
end; 

function GetMACAddress: string;
var
 AdapterList: TLanaEnum; 
 NCB: TNCB; 
begin 
 FillChar(NCB, SizeOf(NCB), 0); 
 NCB.ncb_command := Char(NCBENUM); 
 NCB.ncb_buffer := @AdapterList; 
 NCB.ncb_length := SizeOf(AdapterList); 
 Netbios(@NCB); 
 if Byte(AdapterList.length) > 0 then
   Result := GetAdapterInfo(AdapterList.lana[0]) 
 else 
   Result := 'mac not found'; 
end; 

// usage
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetMACAddress);
end;