![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение траффика через модемное соединение. [D6, WinXP]
Ajax © (2002-05-11 22:02:00)Нужно определить количество принятых и переданных байт. Делаю так:
TRAS_STATS = record
dwSize : Longint;
dwBytesXmited : Longint;
dwBytesRcved : Longint;
dwFramesXmited : Longint;
dwFramesRcved : Longint;
dwTimeoutErr : Longint;
dwAlignmentErr : Longint;
dwHardwareOverrunErr : Longint;
dwFramingErr : Longint;
dwBufferOverrunErr : Longint;
dwCompressionRatioIn : Longint;
dwCompressionRatioOut: Longint;
dwBps : Longint;
dwConnectDuration : Longint;
end;
function RasGetConnectionStatistics(hConn: LPHRasConn; var RAS_STATS:TRAS_STATS ): Longint; stdcall;
function RasGetConnectionStatistics; external "rasapi32.dll" name "RasGetConnectionStatistics";
Procedure GetRASProp;
const MaxEntries = 100;
var BufSize : Integer;
NumEntries: Integer;
Entries : Array[1..MaxEntries] of TRasConn;
cstat : TRAS_STATS;
Begin
Entries[1].dwSize := SizeOf(TRasConn);
Bufsize:=SizeOf(TRasConn)*MaxEntries;
RasEnumConnections(@Entries[1], BufSize, NumEntries);
if numentries > 0 then
begin
cstat.dwSize:=sizeof(Tras_stats);
RasGetConnectionStatistics(@Entries[1],cstat);
ShowMessage(IntToStr(cstat.dwBytesRcved));
end
End;
Получаю постоянно одно и то же число. Я вот думаю, что неправильно объявил функцию RasGetConnectionStatistics. Или может нужно использовать LPRAS_STATS = ^TRAS_STATS ?
Ajax (2002-05-22 18:23:00) [1]Спасибо, все работает.
Я так понял, эта функция работает только под NT, 2000, XP. А как быть под 98.
Gluka (2002-05-22 04:59:00) [2]Всё работает, что ещё надо!?!?!
>>>>
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, "Tipa_Ras";
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
LRS=^TRAS_STATS;
TRAS_STATS = record
dwSize : Longint;
dwBytesXmited : Longint;
dwBytesRcved : Longint;
dwFramesXmited : Longint;
dwFramesRcved : Longint;
dwCrcErr : Longint;
dwTimeoutErr : Longint;
dwAlignmentErr : Longint;
dwHardwareOverrunErr : Longint;
dwFramingErr : Longint;
dwBufferOverrunErr : Longint;
dwCompressionRatioIn : Longint;
dwCompressionRatioOut: Longint;
dwBps : Longint;
dwConnectDuration : Longint;
end;
function RasGetConnectionStatistics(hConn: Integer; RS: LRS): Longint; stdcall;
function RasGetConnectionStatistics; external "rasapi32.dll" name "RasGetConnectionStatistics";
var
Form1: TForm1;
implementation
Procedure GetRASProp;
var
BufSize : Integer;
NumEntries: Integer;
Entries : TRasConn;
cstat : Tras_stats; // or ^Tras_stats, LRS
Begin
Entries.dwSize := SizeOf(TRasConn);
Bufsize:=SizeOf(TRasConn);
RasEnumConnections(@Entries, BufSize, NumEntries);
if numentries > 0 then
begin
cstat.dwSize:=sizeof(Tras_stats);
RasGetConnectionStatistics(Entries.hrasconn,@cstat);
ShowMessage(Format("Kb "%g" polucheno!",[cstat.dwBytesRcved / 1024]));
end else
begin
ShowMessage("Not connected!!!");
Application.Terminate;
end
End;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
GetRASProp;
end;
end.
>>>>
Ajax (2002-05-21 20:06:00) [3]RasEnumConnections(@Entries[1], BufSize, NumEntries);
if numentries > 0 then begin
ShowMessage(">"+ strpas(@Entries[1].szEntryName)+"<");
То есть не напрямую конечно проверка, но тем не менее EntryName возвращается правильно.
Wic (2002-05-21 19:28:00) [4]1. Есть большое подозрение, что с соединением, установленным другой программой, функция работать не будет.
>1) "За @Entries[1] я уверен точно, т.к. я то же самое использую в еще одной функции и она работает"
А какая функция работает?
Ajax (2002-05-21 16:36:00) [5]>Wic © (20.05.02 11:48)
1) За @Entries[1] я уверен точно, т.к. я то же самое использую в еще одной функции и она работает
2) Я соединение вообще не устанавливаю, я пытаюсь посчитать траффик уже установленного.
>gluka © (21.05.02 02:43)
У тебя есть опыт работы с этой функцией? Что можешь посоветовать? А то я начинаю подозревать, что в конце концов все старанья окажутся зря...
gluka (2002-05-21 02:43:00) [6]Всё тут правильно, только:
1. В структуру еще одну запись добавь "dwCrcErr : Longint;", а то размер несовпадает;(MSSDK)
2. КОД:
TRAS_STATS = record
...
...
dwCrcErr : Longint;...
end;
...
var
cstat : Tras_stats;
...
...
RasGetConnectionStatistics();
Entries[1].hrasconn,@cstat
...
...
Wic (2002-05-20 11:48:00) [7]1. > RasGetConnectionStatistics(@Entries[1],cstat); - у тебя
> RasGetConnectionStatistics(@Entries[1],cstat);
HRASCONN hRasConn, // handle to the connection...
Ты уверен, что в @Entries[1] будет то, что надо?..
Именно RasGetConnectionStatistics не пользовался, в похожей функции RasGetConnectionStat (по видимому так, нет под руками исходников и SDK)делал:
глобальная:
var hras: ThRasConn;
..................
в программе:
RasGetConnectionStat(hras,.. и т.д.)
2. Ты сам устанавливешь соединение (RasDial) или используешь что-то стороннее?
Извиняюсь, если какие функции не так "обозвал" - пишу по памяти.
Ajax (2002-05-18 16:36:00) [8]Скачал якобы последний перевод ras.h. Так там все вообще как-то по-другому...
Ajax (2002-05-16 21:01:00) [9]>Wic © (16.05.02 14:09)
Нет.
>Дмитрий Баранов (16.05.02 18:30)
Ох, как я уже только не пытался... Практически все возможные варианты перепробовал. Либо выдает постоянное число, либо, если используюcstat: LPRAS_STATS, "Access violation..." в строкеcstat.dwSize:=sizeof(Tras_stats);
>All
Попробуйте разобраться, ведь все-равно многим нужно траффик мерить, а до сих пор в этом форуме я нормальных идей по этому поводу не видел.
Дмитрий Баранов (2002-05-16 18:30:00) [10]>>То есть все-таки LPRAS_STATS = ^TRAS_STATS и cstat:LPRAS_STATS?
Попробуй, действительно, обьвить прототип с указателем, а в функцию передавать адрес объекта, который ты создаешь в стеке (чтобы с выделением памяти не трахаться).
RasGetConnectionStatistics(@Entries[1],@cstat);
Постоянное число - почти стопроцентно, что это адрес.
Wic (2002-05-16 14:09:00) [11]>to Ajax
Напиши, получилось?
VuDZ (2002-05-13 19:37:00) [12]наверно, я в таких тонкостях делфи не секу уже :<
Ajax (2002-05-13 18:38:00) [13]То есть все-таки LPRAS_STATS = ^TRAS_STATS и cstat:LPRAS_STATS?
VuDZ (2002-05-12 18:19:00) [14]RasGetConnectionStatisticsThe RasGetConnectionStatistics function retrieves accumulated connection statistics for the specified connection.
DWORD RasGetConnectionStatistics(
HRASCONN hRasConn, // handle to the connection
RAS_STATS *lpStatistics // buffer to receive statistics
);
Parameters
hRasConn,
[in] Handle to the connection. Use RasDialor RasEnumConnectionsto obtain this handle.
lpStatistics
[in, out] Pointerto the RAS_STATSstructure that, on output, receives the statistics.
On input, set the dwSize member of this structure to sizeof(RAS_STATS).
This parameter cannot be NULL.
Так что ты должен передавать указатель