uses
SysUtils, ActiveX, ComObj, Variants;
procedure GetWin32_NetworkAdapterInfo;
const
WbemUser = '';
WbemPassword = '';
WbemComputer = 'localhost';
wbemFlagForwardOnly = $00000020;
var
ElementCount: LongWord;
FWMIService: OleVariant;
FWbemObject: OleVariant;
EnumVariant: IEnumVARIANT;
FSWbemLocator: OleVariant;
FWbemObjectSet: OleVariant;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
FWbemObjectSet := FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = 1', 'WQL', wbemFlagForwardOnly);
EnumVariant := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while EnumVariant.Next(1, FWbemObject, ElementCount) = 0 do
begin
memo1.text:=(Format('MACAddress %s', [VarToStr(FWbemObject.MACAddress)]));
FWbemObject := Unassigned;
end;
end;