retrieve the network card addresses

 

 

{for NT4 and Windows 2000, and you must have Admin privileges}

{für NT4 und Windows 2000, und Adminrechte erforderlich}

 

uses

 Registry;

 

const

  nString = 'SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\NetworkCards';

  nEthernet = 'Ethernet';

  nEtherjet = 'Etherjet'; {if Hardware IBM PL300 with Chip 10/100}

  nTcpIp1 = 'SYSTEM\CurrentControlSet\Services\';

  nTcpIp2 = '\Parameters\Tcpip';

 

var

  reg: TRegistry;

  buffer1, buffer2, buffer3: array [1..32] of Char;

  i: Integer;

  ipaddress, subnetmask, DefaultGateway: string;

  Adapter, Adapter_Key: string;

  stringlist: TStrings;

 

function search_adapter_key: string;

var

  astring, description, st: string;

  nPos: integer;

  ServiceName: string;

begin

  reg := TRegistry.Create;

  stringlist  := TStringList.Create;

  reg.RootKey := HKEY_LOCAL_MACHINE;

  reg.OpenKey(nString, False);

  reg.GetKeyNames(stringlist);    {search all subkeys

                                   such alle unterschlüssel}

  reg.CloseKey;

 

  for i := 0 to (stringlist.Count - 1) do

  begin

    st := stringlist[i];

    aString := nString + '\' + st;

    reg := TRegistry.Create;

    reg.RootKey := HKEY_LOCAL_MACHINE;

    reg.OpenKey(aString, False);

    description := reg.ReadString('Description');

    nPos:= AnsiPos(nEthernet, description); {search description for string Ethernet

                                             Beschreibung nach dem string Ethernet absuchen}

    if nPos > 0 then

    begin

      ServiceName := reg.ReadString('ServiceName');

      Adapter_Key := nTcpIp1 + ServiceName + nTcpIp2;

    end;

    nPos := AnsiPos(nEtherjet, description); {search description for string 'Etherjet

                                              if IBM PL300 with MotherboardChip}

    if nPos > 0 then

    begin

      ServiceName := reg.ReadString('ServiceName');

      Adapter_Key := nTcpIp1 + ServiceName + nTcpIp2;

    end;

 

    reg.CloseKey;

  end;

  Result := Adapter_Key;

end;

 

procedure search_for_adapter_NT;

var

  BufSize: Integer;    {Bufsize requested but not used

                        Bufsize erforderlich aber nicht benutzt}

begin

  adapter := search_adapter_key;

  if adapter <> '' then

  begin

    Reg := TRegistry.Create;

    try

      Reg.RootKey := HKEY_LOCAL_MACHINE;

      Reg.OpenKey(adapter, False);

      Reg.ReadBinaryData('IpAddress', buffer1, BufSize);

    finally

      Reg.CloseKey;

      Reg.Free;

    end;

 

    Reg := TRegistry.Create;

    try

      Reg.RootKey := HKEY_LOCAL_MACHINE;

      Reg.OpenKey(adapter, False);

      Reg.ReadBinaryData('SubnetMask', buffer2, BufSize);

    finally

      Reg.CloseKey;

      Reg.Free;

    end;

 

    Reg := TRegistry.Create;

    try

      Reg.RootKey := HKEY_LOCAL_MACHINE;

      Reg.OpenKey(adapter, False);

      Reg.ReadBinaryData('DefaultGateway', buffer3, BufSize);

    finally

      Reg.CloseKey;

      Reg.Free;

    end;

  end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  Memo1.Clear;

  search_for_adapter_NT;

  Memo1.Lines.Add(buffer1);

  Memo1.Lines.Add(buffer2);

  Memo1.Lines.Add(buffer3);

end;