ты не сказал,тебе под мамед или сетку?
если под сеть - то держи:
Код:
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;
ой и чего это я такой добрый?