Прочитав пост http://forum.vingrad.ru/forum/topic-176484/anchor-entry1284448/0.html и прочитав пост http://forum.vingrad.ru/forum/topic-205247/kw-основной-шлюз.html
а также Блогодаря подсказкам kami и : Данкинг разобрался в том что мне нужно сделать.
Привожу полученный мной код Критикуйте его
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, WinSock, ScktComp, Registry, WinInet;
const MAX_ADAPTER_NAME_LENGTH = 256; MAX_ADAPTER_DESCRIPTION_LENGTH = 128; MAX_ADAPTER_ADDRESS_LENGTH = 8;
type
PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING; IP_ADDRESS_STRING = array[0..15] of char;
PIP_ADDR_STRING = ^IP_ADDR_STRING; IP_ADDR_STRING = record Next: PIP_ADDR_STRING; IpAddress: IP_ADDRESS_STRING; IpMask: IP_ADDRESS_STRING; Context: DWORD; end;
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; Description: array[1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of Char; AddressLength: UINT; Address: array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte; Index: DWORD; aType: UINT; DHCPEnabled: UINT; CurrentIPAddress: PIP_ADDR_STRING; IPAddressList: IP_ADDR_STRING; GatewayList: IP_ADDR_STRING; DHCPServer: IP_ADDR_STRING; HaveWINS: BOOL; PrimaryWINSServer: IP_ADDR_STRING; SecondaryWINSServer: IP_ADDR_STRING; LeaseObtained: LongInt; LeaseExpires: LongInt; SpareStuff: array [1..200] of char; end;
PIPAdderessStruct = ^TIPAdderessStruct; TIPAdderessStruct = record IPAddress: string; IpMask: string; Context: DWord; end;
PIPAdderessStructList = ^TIPAdderessStructList; TIPAdderessStructList = array of TIPAdderessStruct;
TAdaptersStruct = record ComboIndex: DWord; AdapterName: string; Description: string; AddressLength: LongWord; Address: array of Byte; Index: DWord; aType: LongWord; DHCPEnabled: Cardinal; CurrentIPAddress: string; IPAddressList: TIPAdderessStructList; GatewayList: TIPAdderessStructList; DHCPServer: TIPAdderessStructList; HaveWINS: Boolean; PrimaryWINSServer: TIPAdderessStructList; SecondaryWINSServer: TIPAdderessStructList; LeaseObtained: LongInt; LeaseExpires: LongInt; SpareStuff: string; end;
TAdaptersStructList = array of TAdaptersStruct;
TForm1 = class(TForm) ListBox1: TListBox; protected public constructor Create(AOwner: TComponent); override; end;
var Form1: TForm1;
implementation
{$R *.dfm}
function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; pOutBufLen: PULONG): DWORD; stdcall; external 'Iphlpapi.dll' name 'GetAdaptersInfo';
function NetApiBufferFree(pBuf: pByte): DWORD; stdcall; external 'Netapi32.dll' name 'NetApiBufferFree';
function GetIPAddrStringList( APIPAddrString: PIP_ADDR_STRING): TIPAdderessStructList; var lPAddrSt: PIP_ADDR_STRING; lIndex: Integer; begin Result := nil; lIndex := 0; if Assigned(APIPAddrString) then begin lPAddrSt := GetMemory(SizeOf(IP_ADDR_STRING)); try lPAddrSt := APIPAddrString; repeat SetLength(Result, lIndex + 1); Result[lIndex].IPAddress := PChar(StrPas(@lPAddrSt^.IpAddress)); Result[lIndex].IpMask := PChar(StrPas(@lPAddrSt^.IpMask)); Result[lIndex].Context := lPAddrSt^.Context; lPAddrSt := lPAddrSt^.Next; Inc(lIndex); until lPAddrSt = nil; finally FreeMemory(lPAddrSt); end; end; end;
function GetAdapterList: TAdaptersStructList; var lOutBufLen: ULONG; lPAdapterInfo, lPNext: PIP_ADAPTER_INFO; lRes: DWORD; lCount: Integer; lIndex: Integer; begin Result := nil; lCount := 1; lIndex := 0;
repeat lRes := GetAdaptersInfo(nil, @lOutBufLen); lOutBufLen := SizeOf(IP_ADAPTER_INFO) * lCount; Inc(lCount); until (lRes = 0) or (lCount = 20);
lPAdapterInfo := GetMemory(lOutBufLen); try ZeroMemory(lPAdapterInfo, lOutBufLen); GetAdaptersInfo(lPAdapterInfo, @lOutBufLen);
lPNext := lPAdapterInfo; repeat SetLength(Result, lIndex + 1); Result[lIndex].ComboIndex := lPNext^.ComboIndex; Result[lIndex].AdapterName := PChar(Trim(StrPas(@lPNext^.AdapterName))); Result[lIndex].Description := PChar(Trim(StrPas(@lPNext^.Description))); Result[lIndex].AddressLength := lPNext^.AddressLength;
SetLength(Result[lIndex].Address, Length(lPNext^.Address)); CopyMemory(@lPNext^.Address, Result[lIndex].Address, Length(lPNext^.Address));
Result[lIndex].Index := lPNext^.Index; Result[lIndex].aType := lPNext^.aType; Result[lIndex].DHCPEnabled := lPNext^.DHCPEnabled;
Result[lIndex].CurrentIPAddress := PChar(StrPas(@lPNext^.CurrentIPAddress)); Result[lIndex].IPAddressList := GetIPAddrStringList(@lPNext^.IPAddressList);
Result[lIndex].GatewayList := GetIPAddrStringList(@lPNext^.GatewayList); Result[lIndex].DHCPServer := GetIPAddrStringList(@lPNext^.DHCPServer); Result[lIndex].HaveWINS := lPNext^.HaveWINS; Result[lIndex].PrimaryWINSServer := GetIPAddrStringList(@lPNext^.PrimaryWINSServer); Result[lIndex].SecondaryWINSServer := GetIPAddrStringList(@lPNext^.SecondaryWINSServer); Result[lIndex].LeaseObtained := lPNext^.LeaseObtained; Result[lIndex].LeaseExpires := lPNext^.LeaseExpires; Result[lIndex].SpareStuff := PChar(StrPas(@lPNext^.SpareStuff)); lPNext:= lPNext^.Next;
Inc(lIndex); until lPNext = nil; finally FreeMemory(lPAdapterInfo); end; end;
{ TForm1 }
constructor TForm1.Create(AOwner: TComponent); var lAdapterList: TAdaptersStructList; i, j: Integer; begin inherited; lAdapterList := GetAdapterList; for i := Low(lAdapterList) to High(lAdapterList) do begin
for j := Low(lAdapterList[i].DHCPServer) to High(lAdapterList[i].DHCPServer) do // Исправленно ListBox1.Items.Add(lAdapterList[i].DHCPServer[j].IPAddress); end; end;
end.
|
Теперь попробую разобрать исходник указанный kami и на примере полученных знаний переписать его |