Тема: Опять Delphi
Показать сообщение отдельно
Старый 12.05.2003, 22:18     # 19
donatas
Junior Member
 
Регистрация: 12.09.2002
Сообщения: 99

donatas Мелкий засранец
ты не сказал,тебе под мамед или сетку?
если под сеть - то держи:
Код:
var
		GetIfTable:function(	pIfTable: PMibIfTable; 
					pdwSize	: PULONG;  
					bOrder	: Boolean ): DWORD; stdcall;

type
 TMibIfTable = packed record
   dwNumEntries	: DWORD;
   Table    	: TMibIfArray;
 end;
 PMibIfTable = ^ TMibIfTable;

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;


procedure TMainForm.tmrTrafficTimer(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
  tmrTraffic.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 //Выполняем функцию
    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)); //Всего отправлено байт
      end;
    end;
  lvTraffic.Items.EndUpdate;
  FreeLibrary(FLibHandle);
  tmrTraffic.Enabled := True; //Не забываем активировать таймер
end;
ой и чего это я такой добрый?
__________________
Latest Active Project: nC++
donatas вне форума