
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.217.4] |
![]() |
|
Сообщ.
#1
,
|
|
|
Как получить статистику работы сетевого адаптера, как то: время работы, скорость подключения, общий объем отправленных и полученных данных в байтах?
|
![]() |
Сообщ.
#2
,
|
|
FAQ: Мониторинг сетей
|
Сообщ.
#3
,
|
|
|
Rouse_ у меня вопрос, в стуктуре MibIfRow, wszName это имя чего, и как его получить ?
![]() ![]() String(Table.Table[i].wszName)// возвращает ' '; |
![]() |
Сообщ.
#4
,
|
|
Это имя сетевого интерфейса (не путать с описанием). Если оно не заполняется при вызове GetIfTable (нет времени проверить), то попробуй через GetIfEntry.
|
Сообщ.
#5
,
|
|
|
![]() ![]() var Table1:PMibIfRow; Table2:TMibIfTable; size:integer; begin Size:=SizeOf(Table2); GetIfTable(@Table2,@Size,false); if Table2.dwNumEntries>0 then begin GetIfEntry(Table1); Table1.dwIndex:=1; memo1.lines.add(Table2.Table[1].bDescr+' name: '+ Table2.Table[1].wszName); memo1.lines.add(Table1.bDescr+' name: '+ Table1.wszName);//всё время выдает - МsC name: ?B???? end; А как получить имя соединения ? |
![]() |
Сообщ.
#6
,
|
|
Я вечерком гляну, чичас просто времени нет разбираться...
|
Сообщ.
#7
,
|
|
|
Rouse_ ок, ждем-с
![]() |
![]() |
Сообщ.
#8
,
|
|
P.O.D, хм, ну я короче фиг его знает какое там имя должно писаться, ничего не заполняется и в MSDN по этому поводу тихо.
Кстати вызывать нужно вот так: ![]() ![]() procedure TMainForm.Button1Click(Sender: TObject); var Table1:TMibIfRow; begin ZeroMemory(@Table1, SizeOf(TMibIfRow)); Table1.dwIndex := 1; // Номер интерфейса GetIfEntry(@Table1); memo1.lines.add(Table1.bDescr + ' name: ' + Table1.wszName); end; Вообще имя виртуального устройства можно получить вот так: ![]() ![]() const MAX_ADAPTER_NAME = 255; type PIP_ADAPTER_INDEX_MAP = ^IP_ADAPTER_INDEX_MAP; IP_ADAPTER_INDEX_MAP = record Index: DWORD; Name: array [0..MAX_ADAPTER_NAME-1] of WideChar; end; PIP_INTERFACE_INFO = ^IP_INTERFACE_INFO; IP_INTERFACE_INFO = record NumAdapters: Longint; Adapter: array [0..0] of IP_ADAPTER_INDEX_MAP; end; function GetIfEntry(pIfRow: PMibIfRow): DWORD; stdcall external 'iphlpapi.dll'; function GetNumberOfInterfaces(var pdwIntf: DWORD): DWORD; stdcall; external 'iphlpapi.dll'; function GetInterfaceInfo(pIfTable: PIP_INTERFACE_INFO; var dwOutBufLen:DWORD): DWORD; stdcall; external 'iphlpapi.dll'; function GetAdapterIndex(AdapterName: PWideChar; var IfIndex: DWORD): DWORD; stdcall; external 'iphlpapi.dll'; procedure TMainForm.Button1Click(Sender: TObject); var I, pdwIntf, dwOutBufLen, IfIndex: DWORD; lpInfo: PIP_INTERFACE_INFO; mirIfDescr: TMibIfRow; begin //if GetNumberOfInterfaces(pdwIntf) = NO_ERROR then //begin GetInterfaceInfo(nil, dwOutBufLen); GetMem(lpInfo, dwOutBufLen); try if GetInterfaceInfo(lpInfo, dwOutBufLen) = NO_ERROR then begin for I := 0 to lpInfo^.NumAdapters - 1 do begin Memo1.Lines.Add('AdapterName: ' + lpInfo^.Adapter[I].Name); if GetAdapterIndex(lpInfo^.Adapter[I].Name, IfIndex) = NO_ERROR then Memo1.Lines.Add('AdapterIndex: ' + IntToStr(IfIndex)) else RaiseLastOSError; ZeroMemory(@mirIfDescr, SizeOf(TMibIfRow)); mirIfDescr.dwIndex := IfIndex; if GetIfEntry(@mirIfDescr) = NO_ERROR then Memo1.Lines.Add('AdapterDescription: ' + mirIfDescr.bDescr) else RaiseLastOSError; end; end else RaiseLastOSError; finally FreeMem(lpInfo); end; end //else //RaiseLastOSError; end; Добавлено Цитата P.O.D @ А как получить имя соединения ? Через RasEnumDevices + RasEnumConnections и там сводить... |
Сообщ.
#9
,
|
|
|
Цитата Rouse_ @ и там сводить... так в томт то всё и дело - как свети. мне бы хотелось получить траффик (GetIfTable) для соед. с нормальным именем, а не с дискрипшенном. |
![]() |
Сообщ.
#10
,
|
|
Цитата P.O.D @ так в томт то всё и дело - как свети. По структурам, там есть места связки. Чичас нет времени на демку, но на след неделе постараюсь нарисовать примерчик (в районе среды, если не забуду...) |
Сообщ.
#11
,
|
|
|
Rouse_ да примерчик я и сам думаю смогу, через какие стуртуры можно связаться ?
|
![]() |
Сообщ.
#12
,
|
|
ТАм глянь в MSDN по поводу Remote Access Service Reference. Я сегодня глядел там через несколько вызовов по структурам можно связать. Функции навскидку не вспомню...
|