На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Статистика работы сетевого адаптера , Статистика работы сетевого адаптера
    Как получить статистику работы сетевого адаптера, как то: время работы, скорость подключения, общий объем отправленных и полученных данных в байтах?
        Rouse_ у меня вопрос, в стуктуре MibIfRow, wszName это имя чего, и как его получить ?
        ExpandedWrap disabled
          String(Table.Table[i].wszName)// возвращает ' ';
          Это имя сетевого интерфейса (не путать с описанием). Если оно не заполняется при вызове GetIfTable (нет времени проверить), то попробуй через GetIfEntry.
            ExpandedWrap disabled
              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;


            А как получить имя соединения ?
              Я вечерком гляну, чичас просто времени нет разбираться...
                Rouse_ ок, ждем-с ;)
                  P.O.D, хм, ну я короче фиг его знает какое там имя должно писаться, ничего не заполняется и в MSDN по этому поводу тихо.
                  Кстати вызывать нужно вот так:

                  ExpandedWrap disabled
                    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;


                  Вообще имя виртуального устройства можно получить вот так:

                  ExpandedWrap disabled
                    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 и там сводить...
                    Цитата Rouse_ @
                    и там сводить...

                    так в томт то всё и дело - как свети.
                    мне бы хотелось получить траффик (GetIfTable) для соед. с нормальным именем, а не с дискрипшенном.
                      Цитата P.O.D @
                      так в томт то всё и дело - как свети.

                      По структурам, там есть места связки. Чичас нет времени на демку, но на след неделе постараюсь нарисовать примерчик (в районе среды, если не забуду...)
                        Rouse_ да примерчик я и сам думаю смогу, через какие стуртуры можно связаться ?
                          ТАм глянь в MSDN по поводу Remote Access Service Reference. Я сегодня глядел там через несколько вызовов по структурам можно связать. Функции навскидку не вспомню...
                          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0309 ]   [ 15 queries used ]   [ Generated: 19.07.25, 07:28 GMT ]