unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Winsock, IpExport, IpHlpApi, IpTypes, IpIfConst, IpRtrMib,
ExtCtrls;
type
TForm1 =
class(TForm)
Timer1: TTimer;
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
combobox1: TComboBox;
Timer2: TTimer;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
old: integer;
old1 : integer;
BytesIn, BytesOut :integer;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var MibRow: TMibIfRow;
IntfTable: PMibIfTable;
Size: DWORD;
I, J: Integer;
begin
with combobox1
do begin
if combobox1.itemindex = 0
then J := 0;
if combobox1.itemindex = 1
then J := 1;
if combobox1.itemindex = 2
then J := 2;
if combobox1.itemindex = 3
then J := 3;
if combobox1.itemindex = 4
then J := 4;
end;
//Auswahl der Netzwerkkarte
try
Size := 0;
if GetIfTable(
nil, Size, True) <> ERROR_INSUFFICIENT_BUFFER
then Exit;
IntfTable := AllocMem(Size);
try
if GetIfTable(IntfTable, Size, True) = NO_ERROR
then
begin
for I := 0
to IntfTable^.dwNumEntries - 1
do
begin
{$R-}MibRow := IntfTable.Table[I];
{$R+}
if MibRow.dwType <> MIB_IF_TYPE_ETHERNET
then Continue;
// oder MIB_IF_TYPE_PPP
if i = j
then begin
BytesIn := MibRow.dwInOctets - old;
label1.caption := floattostr(round(BytesIn /1024 *100)/100) + '
KB/s';
old := MibRow.dwInOctets;
BytesOut := MibRow.dwOutOctets - old1;
label2.Caption := floattostr(round(BytesOut /1024 *100)/100) + '
KB/s';
old1 := MibRow.dwOutOctets;
end;
end;
end;
except
on erangeerror
do
begin
timer1.Enabled:=false;
showmessage('
Ein Treiberproblem ist aufgetreten! Starten Sie den Computer neu.');
end;
end;
finally
FreeMem(IntfTable);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
var MibRow: TMibIfRow;
IntfTable: PMibIfTable;
Size: DWORD;
I : Integer;
begin
BytesIn := 0;
BytesOut := 0;
size := 0;
if GetIfTable(
nil, Size, True) <> ERROR_INSUFFICIENT_BUFFER
then Exit;
IntfTable := AllocMem(Size);
try
if GetIfTable(IntfTable, Size, True) = NO_ERROR
then
begin
for I := 0
to IntfTable^.dwNumEntries - 1
do
begin
{$R-}MibRow := IntfTable.Table[I];
{$R+}
combobox1.items.Add(PChar(@MibRow.bDescr[0]) + '
@ ' + InttoStr(MibRow.dwSpeed
div 1000000)+ '
MBit/s');
end;
end;
finally
FreeMem(IntfTable);
end;
end;
end.