![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Трафик
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)
почитай стати на этом сайте, так оно есть.