![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Индикатор загрузки сети [D7, WinXP]
pipll © (2004-12-11 01:43:00)Мастера, подскажите как реализовать сабж?
Ryan (2004-12-12 14:45:00) [1]HQUERY hQuery;
HCOUNTER phCounter;
PDH_FMT_COUNTERVALUE *lpItemBuffer;
PDH_STATUS pdh;
lpItemBuffer = (PDH_FMT_COUNTERVALUE *) GlobalAlloc
(GPTR, sizeof(PDH_FMT_COUNTERVALUE));
pdh = PdhOpenQuery(NULL,11,&hQuery);
if (pdh == ERROR_SUCCESS) {
char * szCounter = "\\Network Interface\\Bytes total/sec";
pdh = PdhAddCounter(hQuery, szCounter, 0, &phCounter);
}
А потом вызовом
pdh = PdhCollectQueryData(hQuery);
pdh = PdhGetFormattedCounterValue (phCounter,
PDH_FMT_DOUBLE,
NULL,
lpItemBuffer);
if (pdh == ERROR_SUCCESS)
ShowMessage(FloatToStr(lpItemBuffer->doubleValue));
можно получать данные о текущей скорости.
А пропускную способность адаптера можно получить из счетчика "Current Bandwidth"
PS.
Код приблизительный, так что ...
Извиняюсь за С++, просто кажется в дельфи я не обнаружил заголовков для PDH
Anatoly Podgoretsky (2004-12-12 13:05:00) [2]Anatoly Podgoretsky © (12.12.04 12:59) [17]
Находятся в секции HKEY_PERFORMANCE_DATA или HKEY_DYN_DATA
Можно получить список всех ключей этих секции и списки параметров по каждому из ключей, дальше будет понятно по названиям, кроме того надо смотреть по функциям АПИ - там есть функции сброса и считывания счетчиков. У меня гдето ранее валялся код, но найти я его не смогу.
Anatoly Podgoretsky (2004-12-12 13:00:00) [3]Piter © (12.12.04 12:53) [16]
Тогда внимательно читаем вопрос и смотрим Индикатор загрузки сети [D7, WinXP] и не пытаемся применять это к другим ОС.
Anatoly Podgoretsky (2004-12-12 12:59:00) [4]pipll © (11.12.04 01:43)
Копать надо в сторону PerformanceCounters из реестра, какие конкретно ключи не помню. В Вин98 ресстре эти ветки видны в через RegEdit, на ХР они скрыты, но доступны программно.
Piter (2004-12-12 12:53:00) [5]Anatoly Podgoretsky © (12.12.04 12:49) [14]
Установи Windows XP
ну вот еще...
Anatoly Podgoretsky (2004-12-12 12:50:00) [6]pipll © (11.12.04 03:59) [2]
Показывает проценты от максимальной скорости для данного сетевого соединения.
Anatoly Podgoretsky (2004-12-12 12:49:00) [7]123 © (12.12.04 02:18) [11]
Речь про скорость сетевого соединения, оно определяется сетевым адаптером.
Piter © (12.12.04 02:40) [12]
Установи Windows XP
-=SS=- (2004-12-12 12:35:00) [8]Возможно это поможет
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
lvTraffic: TListView;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
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;
type
TMibIfTable = packed record
dwNumEntries : DWORD;
Table : TMibIfArray;
end;
PMibIfTable = ^ TMibIfTable;
var
Form1: TForm1;
GetIfTable:function( pIfTable: PMibIfTable;
pdwSize : PULONG;
bOrder : Boolean ): DWORD; stdcall;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
type TMAC = array [0..7] of Byte;
//В качестве первого значения массив, второе значение, размер данных в массиве
function GetMAC(Value: TMAC; Length: DWORD): String;
var
i: Integer;
begin
if Length = 0 then Result := '00-00-00-00-00-00' else
begin
Result := '';
for i:= 0 to Length -2 do
Result := Result + IntToHex(Value[i],2)+'-';
Result := Result + IntToHex(Value[Length-1],2);
end;
end;
//Сама процедура
var
FLibHandle : THandle;
Table : TMibIfTable;
i : Integer;
Size : Integer;
begin
Timer1.Enabled := False; //Приостанавливаем на всякий случай таймер
lvTraffic.Items.BeginUpdate;
lvTraffic.Items.Clear; //Очищаем список
FLibHandle := LoadLibrary('IPHLPAPI.DLL'); //Загружаем библиотеку
if FLibHandle = 0 then Exit;
@GetIfTable := GetProcAddress(FLibHandle, 'GetIfTable');
if not Assigned(GetIfTable) then
begin
FreeLibrary(FLibHandle);
Close;
end;
Size := SizeOf(Table);
if GetIfTable(@Table, @Size, False ) = 0 then //Выполняем функцию
I:=0;
// for i:= 0 to Table.dwNumEntries-1 do
begin
with lvTraffic.Items.Add do
begin //Выводим результаты
Caption := String(Table.Table[i].bDescr); //Наименование интерфейса
SubItems.Add(GetMAC(TMAC(Table.Table[i].bPhysAddr),
Table.Table[i].dwPhysAddrLen)); //MAC адрес
SubItems.Add(IntToStr(Table.Table[i].dwInOctets)); //Всего принято байт
SubItems.Add(IntToStr(Table.Table[i].dwOutOctets)); //Всего отправлено байт
SubItems.Add(IntToStr(Table.Table[i].dwSpeed));
SubItems.Add(IntToStr(Table.Table[i].dwInErrors));
end;
end;
lvTraffic.Items.EndUpdate;
FreeLibrary(FLibHandle);
Timer1.Enabled := True; //Не забываем активировать таймер
end;
end.
Piter (2004-12-12 02:40:00) [9]Anatoly Podgoretsky © (12.12.04 1:02) [10]
Наведи мыщку на иконку сетевого соединения и увидишь.
ничего не вижу
123 (2004-12-12 02:18:00) [10]Anatoly Podgoretsky © (12.12.04 01:02) [10]
Подключение по локальной сети
Скорость: ...
Отправлено: ...
Получено: ...
Где тут эта приславутая "загрузка сети"?
Я тоже никак не могу понять, что требует автор ветки...
Anatoly Podgoretsky (2004-12-12 01:02:00) [11]Piter © (12.12.04 00:59) [9]
Наведи мыщку на иконку сетевого соединения и увидишь.
Piter (2004-12-12 00:59:00) [12]pipll © (11.12.04 18:56) [7]
1000 Mb/sec, 100 Mb/sec, 10 Mb/sec
я понимаю, но откуда ее берут? Или выбирают любое значение рандомом? Как можно определить - какая пропускная способность у сети?
Biryk (2004-12-11 19:33:00) [13]Vi poishite tu statyu tam vse est krasivo zdelano
pipll (2004-12-11 18:56:00) [14]1000 Mb/sec, 100 Mb/sec, 10 Mb/sec
Piter (2004-12-11 18:53:00) [15]pipll © (11.12.04 18:39) [5]
к пропускной способности сети
а что понимается под пропускной способностью сети?
pipll (2004-12-11 18:39:00) [16]А что XP подразумевает под загрузкой сети?
Под загрузкой сети понимается отношение объема всего трафика, проходящего ч\з сетевуху к пропускной способности сети
Biryk (2004-12-11 17:06:00) [17]Posishi statyu pro Monitoring seti (podklucheny), tam v primere est sposob realizacii proverki zakgruzhenosti (vividit spisok vseh adapterov (realnih i virtualnih)) i ihniy trafik
Piter (2004-12-11 11:50:00) [18]У меня w2k - вроде ничего про сеть не показывает.
А что XP подразумевает под загрузкой сети?
pipll (2004-12-11 03:59:00) [19]Использование в процентах (как в XP диспетчер задач показывает)
Piter (2004-12-11 02:33:00) [20]что ты подразуемваешь под загрузкой сети?