Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору program sample; uses Windows, Messages, Commctrl, SysUtils, IpExport, IpHlpApi, IpTypes, IpIfConst, IpRtrMib, Winsock; {$R dialog.res} {$R ..\..\Lenin_XPStyle.RES} var hApp : Integer; procedure CreateColumnsListview(hLV: HWND); var lvc : TLVColumn; begin lvc.mask := LVCF_TEXT or LVCF_WIDTH or LVCF_FMT; lvc.fmt := LVCFMT_CENTER; lvc.pszText := '#'; lvc.cx := 26; ListView_InsertColumn(hLV, 0, lvc); lvc.mask := LVCF_TEXT or LVCF_WIDTH; lvc.pszText := 'Постоянный маршрут'; lvc.cx := 160; ListView_InsertColumn(hLV, 1, lvc); lvc.mask := lvc.mask or LVCF_FMT; lvc.fmt := LVCFMT_RIGHT; lvc.pszText := 'Маска сети'; lvc.cx := 160; ListView_InsertColumn(hLV, 2, lvc); end; function IpAddrToString(Addr : DWORD) : string; var inad : in_addr; begin inad.s_addr := Addr; Result := inet_ntoa(inad); end; procedure DisplayRoutingTable; var ForwardTable : PMibIpForwardTable; ForwardRow : TMibIpForwardRow; Dest : string; Gate : string; Size : ULONG; I : Integer; lvi : TLVItem; Destination : string; GateWay : string; begin ZeroMemory(@lvi, SizeOf(lvi)); lvi.mask := LVIF_TEXT; SendMessage(GetDlgItem(hApp, 101), LVM_DELETEALLITEMS, 0, 0); SendMessage(GetDlgItem(hApp, 101), WM_SETREDRAW, Integer(FALSE), 0); Size := 0; if not GetIpForwardTable(nil, Size, True) = ERROR_BUFFER_OVERFLOW then Exit; ForwardTable := AllocMem(Size); try if GetIpForwardTable(ForwardTable, Size, True) = ERROR_SUCCESS then begin for I := 0 to ForwardTable^.dwNumEntries - 1 do begin ForwardRow := ForwardTable^.Table[I]; Dest := IpAddrToString(ForwardRow.dwForwardDest); Gate := IpAddrToString(ForwardRow.dwForwardNextHop); if ((Destination = '') or (Pos(Destination, Dest) > 0)) and ((GateWay = '') or (Pos(GateWay, Dest) > 0)) then begin lvi.mask := LVIF_TEXT; lvi.iItem := I; lvi.iSubItem := 0; lvi.pszText := ''; SendMessage(GetDlgItem(hApp, 101), LVM_INSERTITEM, 0, Integer(@lvi)); lvi.iSubItem := 1; lvi.pszText := PChar(Format('%17s', [Dest])); SendMessage(GetDlgItem(hApp, 101), LVM_SETITEM, 0, Integer(@lvi)); lvi.iSubItem := 2; lvi.pszText := PChar(Format('%17s', [IpAddrToString(ForwardRow.dwForwardMask)])); SendMessage(GetDlgItem(hApp, 101), LVM_SETITEM, 0, Integer(@lvi)); end; end; end; finally FreeMem(ForwardTable); end; SendMessage(GetDlgItem(hApp, 101), WM_SETREDRAW, Integer(TRUE), 0); end; function MainDlgProc(hWnd : HWND; uMsg : UINT; wParam : wParam; lParam : lParam) : BOOL; stdcall; begin Result := FALSE; case uMsg of WM_INITDIALOG : begin hApp := hWnd; CreateColumnsListview(GetDlgItem(hApp, 101)); SendMessage(GetDlgItem(hApp, 101), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT or LVS_EX_CHECKBOXES); end; WM_COMMAND : begin case LoWord(wParam) of 102 : DisplayRoutingTable; end; end; WM_DESTROY, WM_CLOSE : begin PostQuitMessage(0); end; end; end; begin InitCommonControls; DialogBox(hInstance, MAKEINTRESOURCE(101), 0, @MainDlgProc); end. |