const
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
// arb.
MAX_ADAPTER_NAME_LENGTH = 256;
// arb.
MAX_ADAPTER_ADDRESS_LENGTH = 8;
// arb.
type
PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING;
IP_ADDRESS_STRING =
packed record
acString:
array [1..16]
of AnsiChar;
end;
PIP_MASK_STRING = ^IP_MASK_STRING;
IP_MASK_STRING = IP_ADDRESS_STRING;
PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING =
packed record
Next : PIP_ADDR_STRING;
IpAddress: IP_ADDRESS_STRING;
IpMask : IP_MASK_STRING;
Context : DWORD;
end;
time_t = int64;
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO =
packed record
Next : PIP_ADAPTER_INFO;
ComboIndex : DWORD;
AdapterName :
array [1..MAX_ADAPTER_NAME_LENGTH + 4]
of AnsiChar ;
Description :
array [1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
of AnsiChar;
AddressLength : UINT;
Address :
array [1..MAX_ADAPTER_ADDRESS_LENGTH]
of Byte;
Index : DWORD;
dwType : UINT;
DhcpEnabled : UINT;
CurrentIpAddress : PIP_ADDR_STRING;
IpAddressList : IP_ADDR_STRING;
GatewayList : IP_ADDR_STRING;
DhcpServer : IP_ADDR_STRING;
HaveWins : Boolean;
PrimaryWinsServer : IP_ADDR_STRING;
SecondaryWinsServer : IP_ADDR_STRING;
LeaseObtained : time_t;
LeaseExpires : time_t;
end;
function GetAdaptersInfo(
const pAdapterInfo: PIP_ADAPTER_INFO;
const pOutBufLen: PULONG): DWORD;
stdcall;
external '
IPHLPAPI.DLL'
name '
GetAdaptersInfo';
//http://msdn.microsoft.com/en-us/library/windows/desktop/aa365917(v=vs.85).aspx
procedure GetConnectionNameList(List: TStrings);
var
pAdapterList: PIP_ADAPTER_INFO;
dwLenAdapter: DWORD;
ErrorCode : DWORD;
begin
List.Clear;
pAdapterList :=
nil;
// Alles auf 0 ==> Benötigte Buffergrösse ermitteln
dwLenAdapter := 0;
ErrorCode := GetAdaptersInfo(pAdapterList, @dwLenAdapter);
If ErrorCode <> ERROR_BUFFER_OVERFLOW
then
begin
RaiseLastOSError(ErrorCode);
exit;
end;
pAdapterList := AllocMem(dwLenAdapter);
try
ErrorCode := GetAdaptersInfo(pAdapterList, @dwLenAdapter);
If ErrorCode <> ERROR_SUCCESS
then
begin
RaiseLastOSError(ErrorCode);
exit;
end;
while Assigned(pAdapterList)
do
begin
List.Add(Format('
AdapterName: %s', [
String(pAdapterList.AdapterName)]));
List.Add(Format('
Descpription: %s', [
String(pAdapterList.Description)]));
List.Add(Format('
ComboIndex: %d', [pAdapterList.ComboIndex]));
List.Add(Format('
AddressLength: %d', [pAdapterList.AddressLength]));
List.Add(Format('
Address: %d', [UInt64(pAdapterList.Address)]));
List.Add(Format('
Index: %d', [pAdapterList.
Index]));
List.Add(Format('
dwType: %d', [pAdapterList.dwType]));
List.Add(Format('
DhcpEnabled: %d', [pAdapterList.DhcpEnabled]));
List.Add(Format('
IpAddressList.IpAddress: %s', [
String(pAdapterList.IpAddressList.IpAddress.acString)]));
List.Add(Format('
IpAddressList.IpMask: %s', [
String(pAdapterList.IpAddressList.IpMask.acString)]));
List.Add(Format('
IpAddressList.Context: %d', [pAdapterList.IpAddressList.Context]));
List.Add(Format('
GatewayList.IpAddress: %s', [
String(pAdapterList.GatewayList.IpAddress.acString)]));
List.Add(Format('
GatewayList.IpMask: %s', [
String(pAdapterList.GatewayList.IpMask.acString)]));
List.Add(Format('
GatewayList.Context: %d', [pAdapterList.GatewayList.Context]));
List.Add(Format('
DhcpServer.IpAddress: %s', [
String(pAdapterList.DhcpServer.IpAddress.acString)]));
List.Add(Format('
DhcpServer.IpMask: %s', [
String(pAdapterList.DhcpServer.IpMask.acString)]));
List.Add(Format('
DhcpServer.Context: %d', [pAdapterList.DhcpServer.Context]));
List.Add(Format('
IpAddressList.HaveWins: %d', [Integer(pAdapterList.HaveWins)]));
List.Add(Format('
PrimaryWinsServer.IpAddress: %s', [
String(pAdapterList.PrimaryWinsServer.IpAddress.acString)]));
List.Add(Format('
PrimaryWinsServer.IpMask: %s', [
String(pAdapterList.PrimaryWinsServer.IpMask.acString)]));
List.Add(Format('
PrimaryWinsServer.Context: %d', [pAdapterList.PrimaryWinsServer.Context]));
List.Add(Format('
SecondaryWinsServer.IpAddress: %s', [
String(pAdapterList.SecondaryWinsServer.IpAddress.acString)]));
List.Add(Format('
SecondaryWinsServer.IpMask: %s', [
String(pAdapterList.SecondaryWinsServer.IpMask.acString)]));
List.Add(Format('
SecondaryWinsServer.Context: %d', [pAdapterList.SecondaryWinsServer.Context]));
List.Add('
-------------------------------------------------------');
pAdapterList := pAdapterList.Next;
end;
finally
FreeMem(pAdapterList);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetConnectionNameList(Memo1.Lines);
end;