Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Den Namen der Netzwerkverbindung ermitteln (W2K)

  Alt 14. Mär 2008, 20:11
Hallo zusammen,

hier in den Posting zeigt Surrounder eine Variante um den Namen der Netzwerkverbindung auszulesen. Ich habe das ganze jetzt mal in Kombination von WinAPI und Registry gelöst.

Delphi-Quellcode:
uses
  Registry;

const
  MAX_HOSTNAME_LEN = 128;
  MAX_DOMAIN_NAME_LEN = 128;
  MAX_SCOPE_ID_LEN = 256;
  MAX_ADAPTER_NAME = 128;
  MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
  MAX_ADAPTER_NAME_LENGTH = 256;
  MAX_ADAPTER_ADDRESS_LENGTH = 8;

type
  PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
  IP_ADAPTER_INFO = record
      Next : PIP_ADAPTER_INFO;
      ComboIndex : DWORD;
      AdapterName : array [1..MAX_ADAPTER_NAME_LENGTH+4] of Char ;
  end;

function GetAdaptersInfo(const pAdapterInfo : PIP_ADAPTER_INFO;const pOutBufLen : PULONG) : DWORD; stdcall;
     external 'IPHLPAPI.DLLname 'GetAdaptersInfo';

resourcestring
  w2knetcard = 'SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}';

function GetConnectionNameList : TStringList;
var
  pAdapterList : PIP_ADAPTER_INFO;
  dwLenAdapter : integer;
  reg : TRegistry;
  I : Integer;
  AdapterName : string;
begin
  result := TStringList.Create;
  result.Clear;
  pAdapterList := nil;
  dwLenAdapter := 0;
  if GetAdaptersInfo(pAdapterList,@dwLenAdapter) <> ERROR_BUFFER_OVERFLOW then exit;
  pAdapterList := AllocMem(dwLenAdapter);
  if GetAdaptersInfo(pAdapterList,@dwLenAdapter) <> ERROR_SUCCESS then exit;
  repeat
    AdapterName := '';
    for I := 0 to Length(pAdapterList.AdapterName) - 1 do
      if pAdapterList.AdapterName[i] <> 'then
        AdapterName := AdapterName + pAdapterList.AdapterName[i];
    reg := TRegistry.Create();
    reg.RootKey := HKEY_LOCAL_MACHINE;
    try
      if reg.OpenKeyReadOnly(w2knetcard + '\' + AdapterName + '\Connection') then
        result.Add(reg.ReadString('Name'));
    finally
      reg.CloseKey;
      reg.Free;
    end;
    pAdapterList := pAdapterList.Next;
  until pAdapterList = nil;
end;
Aufrufen kann man das ganze nun mit :
Memo1.Lines := GetConnectionNameList; Das ganze funktioniert von Windows 2000 bis VISTA. Ab Windows XP kann aber MSDN-Library durchsuchenGetAdaptersAddresses verwendet werden. Diese Funktion ist nicht in der IPHLPAPI.DLL von Windows 2000 vorhanden, deswegen der Umweg über die Registry.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat