Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Трафик


Uiop ©   (2007-01-19 20:03:00) 

Проблема: нужно подсчитать выходящий трафик. Подскажите пож что юзать. Если б кто дал ссылку на компонент то ваще халява) Заранее спс.


_SuN_   (2007-01-22 04:26:00) [1]

unit mnetstat;

interface

uses Windows;

type TMibIfRow   = packed record
                   wszName            : array[0..255] of WideChar;
                   dwIndex            : DWORD;
                   dwType             : DWORD;
                   dwMtu              : DWORD;
                   dwSpeed            : DWORD;
                   dwPhysAddrLen      : DWORD;
                   bPhysAddr          : array[0..7] of Byte;
                   dwAdminStatus      : DWORD;
                   dwOperStatus       : DWORD;
                   dwLastChange       : DWORD;
                   dwInOctets         : DWORD;
                   dwInUcastPkts      : DWORD;
                   dwInNUCastPkts     : DWORD;
                   dwInDiscards       : DWORD;
                   dwInErrors         : DWORD;
                   dwInUnknownProtos  : DWORD;
                   dwOutOctets        : DWORD;
                   dwOutUCastPkts     : DWORD;
                   dwOutNUCastPkts    : DWORD;
                   dwOutDiscards      : DWORD;
                   dwOutErrors        : DWORD;
                   dwOutQLen          : DWORD;
                   dwDescrLen         : DWORD;
                   bDescr             : array[0..255] of Char;
                  end;
    TMibIfArray = array [0..512] of TMibIfRow;
    PMibIfRow   = ^TMibIfRow;
    PmibIfArray = ^TmibIfArray;
    TMibIfTable = packed record
                   dwNumEntries : DWORD;
                   Table        : TMibIfArray;
                  end;
    PMibIfTable = ^TMibIfTable;

function IsConnectedToInternet: Boolean;
function GetTraffic (var InTraff : DWORD; var OutTraff : dword; index : byte) : longint;
function GetTraffic_dyn (var InTraff : DWORD; var OutTraff : dword) : longint;
function GetIfTable (pIfTable: PMibIfTable; pdwSize: PULONG; bOrder: Boolean ): DWORD; stdcall; external 'IPHLPAPI.DLL' name 'GetIfTable';
function GetConnectionsCount : byte;
function GetCSpeed (index : byte) : integer;
function GetCSInf (index : byte) : string;

implementation

uses WinSock, WinInet, sysutils;

function IsConnectedToInternet : Boolean;
var dwConnectionTypes : DWORD;
begin
dwConnectionTypes:=INTERNET_CONNECTION_MODEM+INTERNET_CONNECTION_LAN+INTERNET_CONNECTION_PROXY;
Result:=InternetGetConnectedState (@dwConnectionTypes, 0);
end;

function GetCSInf (index : byte) : string;
var Table : TMibIfTable;
   Size  : Integer;
begin
result:='0 (0/0)';
if (not(IsConnectedToInternet))
   then exit;
Size:=SizeOf(Table);
if (GetIfTable(@Table,@Size,False)=0)
   then result:='SPD:'+inttostr(Table.Table[index].dwSpeed)+'  PKTS:'+inttostr(Table.Table[index].dwInUcastPkts+Table.Table[index].dwInNUCastPkts)+'/'+inttostr(Table.Table[index].dwOutUcastPkts+Table.Table[index].dwOutNUCastPkts);
end;

function GetCSpeed (index : byte) : integer;
var Table : TMibIfTable;
   Size  : Integer;
begin
result:=0;
if (not(IsConnectedToInternet))
   then exit;
Size:=SizeOf(Table);
if (GetIfTable(@Table,@Size,False)=0)
   then result:=Table.Table[index].dwSpeed;
end;

function GetTraffic (var InTraff : DWORD; var OutTraff : dword; index : byte) : longint;
var Table : TMibIfTable;
   Size  : Integer;
begin
result:=0;
intraff:=0;
outtraff:=0;
if (not(IsConnectedToInternet))
   then exit;
Size:=SizeOf(Table);
if (GetIfTable(@Table,@Size,False)=0)
   then begin
         intraff:=Table.Table[index].dwInOctets;
         outtraff:=Table.Table[index].dwOutOctets;
         result:=intraff+outtraff;
        end;
end;

function GetConnectionsCount : byte;
var Table : TMibIfTable;
   Size  : Integer;
begin
result:=0;
Size:=SizeOf(Table);
if (GetIfTable(@Table,@Size,False)=0)
   then result:=table.dwNumEntries;
end;

function GetTraffic_dyn (var InTraff : DWORD; var OutTraff : dword) : longint;
var GetIfTable : function (pIfTable: PMibIfTable; pdwSize: PULONG; bOrder: Boolean ): DWORD; stdcall;
   H          : THandle;
   Table      : TMibIfTable;
   Size       : Integer;
begin
result:=0;
intraff:=0;
outtraff:=0;
if (not(IsConnectedToInternet))
   then exit;
H:=LoadLibrary('IPHLPAPI.DLL');
if (H=0)
   then Exit;
@GetIfTable:=GetProcAddress(H,'GetIfTable');
if (not(Assigned(GetIfTable)))
   then begin
         FreeLibrary(H);
         exit;
        end;
Size:=SizeOf(Table);
if (GetIfTable(@Table,@Size,False)=0)
   then begin
         intraff:=Table.Table[0].dwInOctets;
         outtraff:=Table.Table[0].dwOutOctets;
         result:=intraff+outtraff;
        end;
FreeLibrary(H);
end;

end.


Орион   (2007-01-20 09:37:00) [2]

жажда халявы когда-нибудь доведет вас до нищеты (с) чей-то


Eraser   (2007-01-19 20:41:00) [3]

> [0] Uiop   (19.01.07 20:03)

почитай стати на этом сайте, так оно есть.


Наверх

Титульная страница Поиск, карта сайта Написать письмо