SELECT 'fengzhong' = CASE WHEN datepart(mi, GETONOFFDATETIME) <= 20 THEN '0-20' WHEN datepart(mi, GETONOFFDATETIME) >20 AND datepart(mi, GETONOFFDATETIME) <= 40 THEN '21-40' WHEN datepart(mi, GETONOFFDATETIME) > 40 AND datepart(mi, GETONOFFDATETIME) <=60 THEN '41-60' END, RouteCode, RIGHT(BUSCODE, 4) AS Expr1, LEFT(CONVERT(char(20), GETONOFFDATETIME, 20), 13) AS Expr4, SUM(PAYMENTAMOUNTPOINT) AS Expr2, COUNT(*) AS Expr3 FROM dbo.query_001 GROUP BY ROUTECODE, RIGHT(BUSCODE, 4), CASE WHEN datepart(mi, GETONOFFDATETIME) <= 20 THEN '0-20' WHEN datepart(mi, GETONOFFDATETIME) > 20 AND datepart(mi, GETONOFFDATETIME) <= 40 THEN '21-40' WHEN datepart(mi, GETONOFFDATETIME) > 40 AND datepart(mi, GETONOFFDATETIME) <=60 THEN '41-60' END, LEFT(CONVERT(char(20), GETONOFFDATETIME, 20), 13) order by expr4
呵呵 用IPHelper来处理是可以的关键代码 // statistics data for each interface TStatistics = record dwInterfaceIndex: DWORD; ActiveCountIn, { count of samples where something was received } ActiveCountOut, { count of samples where something was sent } PrevCountIn, { previous byte count in } PrevCountOut, { previous byte count out} TotalIn, { total byte count in } TotalOut, { total byte count out } InPerSec, { byte count in of last sample period } OutPerSec, { byte count out of last sample period } PeakInPerSec, { peak byte count in/out } PeakOutPerSec : DWORD; end; TStatArr = array of TStatistics; var IPForm : TIPForm; StatArr : TStatArr;implementation{$R *.DFM} //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.FormCreate( Sender: TObject ); begin Caption := Caption + ' ' + Version; // grid headers... sgMib.Cells[0,0] := 'adapter description'; sgMib.Cells[1,0] := 'MAC-address'; sgMIB.Cells[2,0] := 'IP-Address'; sgMIB.Cells[3,0] := 'oct/sec in'; sgMIB.Cells[4,0] := 'peak in/sec'; sgMIB.Cells[5,0] := 'avg.in/sec'; sgMIB.Cells[6,0] := 'oct/sec out'; sgMIB.Cells[7,0] := 'peak out/sec'; sgMIB.Cells[8,0] := 'avg.out/sec'; (* ***do not change: all calculations are based on a sample interval of =1= second*** *) Timer1.Interval := 1000; CaptureMIBData( true ); end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Timer1.OnTimer := nil; Action := caFREE; end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.btnQuitClick(Sender: TObject); begin Close; end; //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.cbOnTopClick(Sender: TObject); begin if cbOnTop.Checked = true then FormStyle := fsSTAYONTOP else FormStyle := fsNORMAL; end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.Timer1Timer( Sender: TObject ); begin Timer1.Enabled := false; CaptureMIBData( false ); Timer1.Enabled := true; end; //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.btnStartCapClick(Sender: TObject); begin btnStartCap.Enabled := false; btnStopCap.Enabled := true; ClearCounters; Timer1.Enabled := true; end; //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.btnStopCapClick(Sender: TObject); begin btnStartCap.Enabled := true; btnStopCap.Enabled := false;; Timer1.Enabled := false; end; //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.btnClearClick(Sender: TObject); begin ClearCounters; end; //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// // get MIB data and init or show data procedure TIPForm.CaptureMIBData( InitFlag: boolean );var MibArr : IpHlpAPI.TMIBIfArray; begin Get_IfTableMIB( MibArr ); // get current MIB data if InitFlag then InitGrid( MibArr ) // initialise grid & counters else Data2Grid( MibArr ); // show data end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.ClearCounters; begin CaptureMIBData( true ); CaptureMIBData( false); end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// procedure TIPForm.Data2Grid( MIBArr: IpHlpAPI.TMIBIFArray ); var i : integer; begin for i := low(MIBArr) to High(MIBArr) do with MIBArr[i] do begin with StatArr[i] do begin InPerSec := dwInOctets - PrevCountIn; inc(TotalIn, InPerSec); if InPerSec > 0 then inc(ActivecountIn); PrevCountIn := dwInOctets; // OutPerSec := dwOutOctets - PrevCountOut; inc(TotalOut,OutPerSec); if OutPerSec > 0 then inc(ActivecountOut); PrevCountOut := dwOutOctets; // peak values if InPerSec > PeakInPerSec then PeakInPersec := InPersec; if OutPerSec > PeakOutPerSec then PeakOutPerSec := OutPerSec; // update grid sgMIB.Cells[3, i+1] := IntToStr( InPerSec) ; sgMIB.Cells[4, i+1] := IntToStr( PeakInPerSec ) ; if ActiveCountIn > 0 then sgMIB.Cells[5, i+1] := IntToStr( TotalIn div ActiveCountIn) else sgMIB.Cells[5, i+1] := ' -- '; sgMIB.Cells[6, i+1] := IntToStr( OutPerSec) ; sgMIB.Cells[7, i+1] := IntToStr( PeakOutPerSec) ; if ActiveCountOut > 0 then sgMIB.Cells[8, i+1] := IntToStr( TotalOut div ActiveCountOut) else sgMIB.Cells[8, i+1] := ' -- '; end; end; end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// function TIPForm.GetIPFromIFIndex( InterfaceIndex: integer ): string; var i: integer; IPArr : TMIBIPAddrArray; begin Result := '!not_found!'; // shouldn't happen... Get_IPAddrTableMIB( IpArr ); // get IP-address table if Length(IPArr) > 0 then for i := low(IPArr) to High(IPArr) do // look for matching index... if IPArr[i].dwIndex = InterfaceIndex then begin Result := IPAddr2Str(IParr[i].dwAddr); BREAK; end; end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// // initialise stat variables & grid procedure TIpForm.InitGrid( MibArr: IpHlpAPI.TMibIFArray ); var i : integer; IPArr : TMibIPAddrArray; Descr: string; begin if Length(MibArr) > 0 then begin sgMib.RowCount := succ(Length( MibArr )); SetLength( StatArr, Length(MibArr)); for i := low(MIBArr) to High(MIBArr) do with MIBArr[i] do begin StatArr[i].ActiveCountIn := 0; StatArr[i].ActiveCountOut:= 0; StatArr[i].PrevCountIn := dwInOctets; StatArr[i].PrevCountOut:= dwOutOctets; StatArr[i].TotalIn := 0; StatArr[i].TotalOut:= 0; StatArr[i].InPerSec:= 0; StatArr[i].OutPerSec:= 0; StatArr[i].PeakInPerSec := 0; StatArr[i].PeakOutPerSec:=0; SetLength( Descr, pred(dwDescrLen)); move(bDescr, Descr[1], pred(dwDescrLen)); // adapter description sgMIB.Cells[0, succ(i)] := Trim(Descr) ; // adapter MAC address sgMIB.Cells[1, succ(i)] := MacAddr2Str( TMacAddress( bPhysAddr ), dwPhysAddrLen ); // adapter IP address sgMIB.Cells[2, succ(i)] := GetIPFromIFIndex( MIBArr[i].dwIndex); // end; end; end;(* version history --------------- 2.0 --- add: mean in/out values add: stayinfront add: minor cosmetic changes *) end. http://lysoft.7u7.net
使劲帮你抗
<= 20 THEN '0-20' WHEN datepart(mi, GETONOFFDATETIME) >20 AND datepart(mi,
GETONOFFDATETIME) <= 40 THEN '21-40' WHEN datepart(mi, GETONOFFDATETIME)
> 40 AND datepart(mi, GETONOFFDATETIME) <=60 THEN '41-60' END, RouteCode,
RIGHT(BUSCODE, 4) AS Expr1, LEFT(CONVERT(char(20), GETONOFFDATETIME, 20),
13) AS Expr4, SUM(PAYMENTAMOUNTPOINT) AS Expr2, COUNT(*) AS Expr3
FROM dbo.query_001
GROUP BY ROUTECODE, RIGHT(BUSCODE, 4), CASE WHEN datepart(mi,
GETONOFFDATETIME) <= 20 THEN '0-20' WHEN datepart(mi, GETONOFFDATETIME)
> 20 AND datepart(mi, GETONOFFDATETIME) <= 40 THEN '21-40'
WHEN datepart(mi, GETONOFFDATETIME) > 40 AND datepart(mi,
GETONOFFDATETIME) <=60 THEN '41-60'
END, LEFT(CONVERT(char(20), GETONOFFDATETIME, 20), 13) order by expr4
用IPHelper来处理是可以的关键代码
// statistics data for each interface
TStatistics = record
dwInterfaceIndex: DWORD;
ActiveCountIn, { count of samples where something was received }
ActiveCountOut, { count of samples where something was sent }
PrevCountIn, { previous byte count in }
PrevCountOut, { previous byte count out}
TotalIn, { total byte count in }
TotalOut, { total byte count out }
InPerSec, { byte count in of last sample period }
OutPerSec, { byte count out of last sample period }
PeakInPerSec, { peak byte count in/out }
PeakOutPerSec : DWORD;
end;
TStatArr = array of TStatistics;
var
IPForm : TIPForm;
StatArr : TStatArr;implementation{$R *.DFM}
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.FormCreate( Sender: TObject );
begin
Caption := Caption + ' ' + Version;
// grid headers...
sgMib.Cells[0,0] := 'adapter description';
sgMib.Cells[1,0] := 'MAC-address';
sgMIB.Cells[2,0] := 'IP-Address';
sgMIB.Cells[3,0] := 'oct/sec in';
sgMIB.Cells[4,0] := 'peak in/sec';
sgMIB.Cells[5,0] := 'avg.in/sec';
sgMIB.Cells[6,0] := 'oct/sec out';
sgMIB.Cells[7,0] := 'peak out/sec';
sgMIB.Cells[8,0] := 'avg.out/sec';
(*
***do not change: all calculations
are based on a sample interval of =1= second***
*)
Timer1.Interval := 1000;
CaptureMIBData( true );
end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer1.OnTimer := nil;
Action := caFREE;
end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.btnQuitClick(Sender: TObject);
begin
Close;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.cbOnTopClick(Sender: TObject);
begin
if cbOnTop.Checked = true then
FormStyle := fsSTAYONTOP
else
FormStyle := fsNORMAL;
end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.Timer1Timer( Sender: TObject );
begin
Timer1.Enabled := false;
CaptureMIBData( false );
Timer1.Enabled := true;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.btnStartCapClick(Sender: TObject);
begin
btnStartCap.Enabled := false;
btnStopCap.Enabled := true;
ClearCounters;
Timer1.Enabled := true;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.btnStopCapClick(Sender: TObject);
begin
btnStartCap.Enabled := true;
btnStopCap.Enabled := false;;
Timer1.Enabled := false;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.btnClearClick(Sender: TObject);
begin
ClearCounters;
end;
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
// get MIB data and init or show data
procedure TIPForm.CaptureMIBData( InitFlag: boolean );var
MibArr : IpHlpAPI.TMIBIfArray;
begin
Get_IfTableMIB( MibArr ); // get current MIB data
if InitFlag then
InitGrid( MibArr ) // initialise grid & counters
else
Data2Grid( MibArr ); // show data
end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.ClearCounters;
begin
CaptureMIBData( true );
CaptureMIBData( false);
end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
procedure TIPForm.Data2Grid( MIBArr: IpHlpAPI.TMIBIFArray );
var
i : integer;
begin for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin with StatArr[i] do
begin
InPerSec := dwInOctets - PrevCountIn;
inc(TotalIn, InPerSec);
if InPerSec > 0 then
inc(ActivecountIn);
PrevCountIn := dwInOctets;
//
OutPerSec := dwOutOctets - PrevCountOut;
inc(TotalOut,OutPerSec);
if OutPerSec > 0 then
inc(ActivecountOut);
PrevCountOut := dwOutOctets;
// peak values
if InPerSec > PeakInPerSec then
PeakInPersec := InPersec;
if OutPerSec > PeakOutPerSec then
PeakOutPerSec := OutPerSec; // update grid
sgMIB.Cells[3, i+1] := IntToStr( InPerSec) ;
sgMIB.Cells[4, i+1] := IntToStr( PeakInPerSec ) ;
if ActiveCountIn > 0 then
sgMIB.Cells[5, i+1] := IntToStr( TotalIn div ActiveCountIn)
else
sgMIB.Cells[5, i+1] := ' -- ';
sgMIB.Cells[6, i+1] := IntToStr( OutPerSec) ;
sgMIB.Cells[7, i+1] := IntToStr( PeakOutPerSec) ;
if ActiveCountOut > 0 then
sgMIB.Cells[8, i+1] := IntToStr( TotalOut div ActiveCountOut)
else
sgMIB.Cells[8, i+1] := ' -- ';
end;
end;
end;//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
function TIPForm.GetIPFromIFIndex( InterfaceIndex: integer ): string;
var
i: integer;
IPArr : TMIBIPAddrArray;
begin
Result := '!not_found!'; // shouldn't happen...
Get_IPAddrTableMIB( IpArr ); // get IP-address table
if Length(IPArr) > 0 then
for i := low(IPArr) to High(IPArr) do // look for matching index...
if IPArr[i].dwIndex = InterfaceIndex then
begin
Result := IPAddr2Str(IParr[i].dwAddr);
BREAK;
end;
end;
// initialise stat variables & grid
procedure TIpForm.InitGrid( MibArr: IpHlpAPI.TMibIFArray );
var
i : integer;
IPArr : TMibIPAddrArray; Descr: string;
begin
if Length(MibArr) > 0 then
begin
sgMib.RowCount := succ(Length( MibArr ));
SetLength( StatArr, Length(MibArr));
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
StatArr[i].ActiveCountIn := 0;
StatArr[i].ActiveCountOut:= 0;
StatArr[i].PrevCountIn := dwInOctets;
StatArr[i].PrevCountOut:= dwOutOctets;
StatArr[i].TotalIn := 0;
StatArr[i].TotalOut:= 0;
StatArr[i].InPerSec:= 0;
StatArr[i].OutPerSec:= 0;
StatArr[i].PeakInPerSec := 0;
StatArr[i].PeakOutPerSec:=0;
SetLength( Descr, pred(dwDescrLen));
move(bDescr, Descr[1], pred(dwDescrLen));
// adapter description
sgMIB.Cells[0, succ(i)] := Trim(Descr) ;
// adapter MAC address
sgMIB.Cells[1, succ(i)] := MacAddr2Str( TMacAddress( bPhysAddr ), dwPhysAddrLen );
// adapter IP address
sgMIB.Cells[2, succ(i)] := GetIPFromIFIndex( MIBArr[i].dwIndex);
//
end;
end;
end;(*
version history
---------------
2.0
---
add: mean in/out values
add: stayinfront
add: minor cosmetic changes
*)
end.
http://lysoft.7u7.net
// initialise stat variables & grid
procedure TIpForm.InitGrid( MibArr: IpHlpAPI.TMibIFArray );
var
i : integer;
IPArr : TMibIPAddrArray; Descr: string;
begin
if Length(MibArr) > 0 then
begin
sgMib.RowCount := succ(Length( MibArr ));
SetLength( StatArr, Length(MibArr));
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
StatArr[i].ActiveCountIn := 0;
StatArr[i].ActiveCountOut:= 0;
StatArr[i].PrevCountIn := dwInOctets;
StatArr[i].PrevCountOut:= dwOutOctets;
StatArr[i].TotalIn := 0;
StatArr[i].TotalOut:= 0;
StatArr[i].InPerSec:= 0;
StatArr[i].OutPerSec:= 0;
StatArr[i].PeakInPerSec := 0;
StatArr[i].PeakOutPerSec:=0;
SetLength( Descr, pred(dwDescrLen));
move(bDescr, Descr[1], pred(dwDescrLen));
// adapter description
sgMIB.Cells[0, succ(i)] := Trim(Descr) ;
// adapter MAC address
sgMIB.Cells[1, succ(i)] := MacAddr2Str( TMacAddress( bPhysAddr ), dwPhysAddrLen );
// adapter IP address
sgMIB.Cells[2, succ(i)] := GetIPFromIFIndex( MIBArr[i].dwIndex);
//
end;
end;
end;(*
version history
---------------
2.0
---
add: mean in/out values
add: stayinfront
add: minor cosmetic changes
*)
end.
http://lysoft.7u7.net
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, IPHelper, IPHLPAPI, StdCtrls, ComCtrls, Buttons, Grids;const
version = '1.0';
type
TIPForm = class( TForm )
Timer1: TTimer;
GroupBox1: TGroupBox;
btnQuit: TSpeedButton;
cbOnTop: TCheckBox;
btnClear: TSpeedButton;
btnStopCap: TSpeedButton;
btnStartCap: TSpeedButton;
sgMIB: TStringGrid;
procedure Timer1Timer( Sender: TObject );
procedure FormCreate( Sender: TObject );
procedure btnStartCapClick(Sender: TObject);
procedure btnStopCapClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cbOnTopClick(Sender: TObject);
procedure btnQuitClick(Sender: TObject);
private
{ Private declarations }
function GetIPFromIFIndex( InterfaceIndex: integer ): string;
procedure InitGrid( MibArr: IpHlpAPI.TMibIFArray );
procedure CaptureMIBData( InitFlag: boolean );
procedure ClearCounters;
procedure Data2Grid( MIBArr: IpHlpAPI.TMIBIFArray );
public
{ Public declarations }
end; //用于统计数据结构
TStatistics = record
dwInterfaceIndex: DWORD;
ActiveCountIn, {当前流入的数据量}
ActiveCountOut, {当前流出的数据量}
PrevCountIn, {前次流入的数据量}
PrevCountOut, {前次流出的数据量}
TotalIn, {总的流入数据量}
TotalOut, {总的流出数据量}
InPerSec, {最后一次统计的流入速度}
OutPerSec, {最后一次统计的流出速度}
PeakInPerSec, {最高的流入流出速度}
PeakOutPerSec : DWORD;
end;
TStatArr = array of TStatistics;var
IPForm : TIPForm;
StatArr : TStatArr;implementation{$R *.DFM}//初始化
procedure TIPForm.FormCreate( Sender: TObject );
begin
Caption := Caption + ' ' + Version;
sgMib.Cells[0,0] := '网卡信息';
sgMib.Cells[1,0] := 'MAC地址';
sgMIB.Cells[2,0] := 'IP地址';
sgMIB.Cells[3,0] := '流入(byte/s)';
sgMIB.Cells[4,0] := '最高(in/s)';
sgMIB.Cells[5,0] := '平均(in/s)';
sgMIB.Cells[6,0] := '流出(oct/s)';
sgMIB.Cells[7,0] := '最高(byte/s)';
sgMIB.Cells[8,0] := '平均(out/s)';
//设置统计间隔为1秒
Timer1.Interval := 1000;
CaptureMIBData( true );
end;//关闭窗口,释放资源
procedure TIPForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer1.OnTimer := nil;
Action := caFREE;
end;procedure TIPForm.btnQuitClick(Sender: TObject);
begin
Close;
end;//使窗口处于最上层
procedure TIPForm.cbOnTopClick(Sender: TObject);
begin
if cbOnTop.Checked = true then
FormStyle := fsSTAYONTOP
else
FormStyle := fsNORMAL;
end;//使用定时器统计
procedure TIPForm.Timer1Timer( Sender: TObject );
begin
Timer1.Enabled := false;
CaptureMIBData( false );
Timer1.Enabled := true;
end;//统计开始
procedure TIPForm.btnStartCapClick(Sender: TObject);
begin
btnStartCap.Enabled := false;
btnStopCap.Enabled := true;
ClearCounters;
Timer1.Enabled := true;
end;//统计停止
procedure TIPForm.btnStopCapClick(Sender: TObject);
begin
btnStartCap.Enabled := true;
btnStopCap.Enabled := false;;
Timer1.Enabled := false;
end;//清除统计
procedure TIPForm.btnClearClick(Sender: TObject);
begin
ClearCounters;
end;//取得MIB结构的数据并初始化或显示统计
procedure TIPForm.CaptureMIBData( InitFlag: boolean );
var
MibArr : IpHlpAPI.TMIBIfArray;
begin
Get_IfTableMIB( MibArr );
if InitFlag then
InitGrid( MibArr )
else
Data2Grid( MibArr );
end;//清除统计数据
procedure TIPForm.ClearCounters;
begin
CaptureMIBData( true );
CaptureMIBData( false);
end;//根据取得的信息设置表格显示信息
procedure TIPForm.Data2Grid( MIBArr: IpHlpAPI.TMIBIFArray );
var
i : integer;
begin
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
with StatArr[i] do
begin
InPerSec := dwInOctets - PrevCountIn;
inc(TotalIn, InPerSec);
if InPerSec > 0 then
inc(ActivecountIn);
PrevCountIn := dwInOctets;
OutPerSec := dwOutOctets - PrevCountOut;
inc(TotalOut,OutPerSec);
if OutPerSec > 0 then
inc(ActivecountOut);
PrevCountOut := dwOutOctets;
if InPerSec > PeakInPerSec then
PeakInPersec := InPersec;
if OutPerSec > PeakOutPerSec then
PeakOutPerSec := OutPerSec;
//更新表格显示
sgMIB.Cells[3, i+1] := IntToStr( InPerSec) ;
sgMIB.Cells[4, i+1] := IntToStr( PeakInPerSec ) ;
if ActiveCountIn > 0 then
sgMIB.Cells[5, i+1] :=
IntToStr( TotalIn div ActiveCountIn)
else
sgMIB.Cells[5, i+1] := ' -- ';
sgMIB.Cells[6, i+1] := IntToStr( OutPerSec) ;
sgMIB.Cells[7, i+1] := IntToStr( PeakOutPerSec) ;
if ActiveCountOut > 0 then
sgMIB.Cells[8, i+1] :=
IntToStr( TotalOut div ActiveCountOut)
else
sgMIB.Cells[8, i+1] := ' -- ';
end;
end;
end;//根据序号从列表中取得IP地址
function TIPForm.GetIPFromIFIndex( InterfaceIndex: integer ): string;
var
i: integer;
IPArr : TMIBIPAddrArray;
begin
Result := '!not_found!';
Get_IPAddrTableMIB( IpArr );
if Length(IPArr) > 0 then
for i := low(IPArr) to High(IPArr) do
if IPArr[i].dwIndex = InterfaceIndex then
begin
Result := IPAddr2Str(IParr[i].dwAddr);
BREAK;
end;
end;//初始化统计变量与表格
procedure TIpForm.InitGrid( MibArr: IpHlpAPI.TMibIFArray );
var
i : integer;
IPArr : TMibIPAddrArray;
Descr: string;
begin
if Length(MibArr) > 0 then
begin
sgMib.RowCount := succ(Length( MibArr ));
SetLength( StatArr, Length(MibArr));
for i := low(MIBArr) to High(MIBArr) do
with MIBArr[i] do
begin
StatArr[i].ActiveCountIn := 0;
StatArr[i].ActiveCountOut:= 0;
StatArr[i].PrevCountIn := dwInOctets;
StatArr[i].PrevCountOut:= dwOutOctets;
StatArr[i].TotalIn := 0;
StatArr[i].TotalOut:= 0;
StatArr[i].InPerSec:= 0;
StatArr[i].OutPerSec:= 0;
StatArr[i].PeakInPerSec := 0;
StatArr[i].PeakOutPerSec:=0;
SetLength( Descr, pred(dwDescrLen));
move(bDescr, Descr[1], pred(dwDescrLen));
//网卡描述信息
sgMIB.Cells[0, succ(i)] := Trim(Descr) ;
//网卡MAC地址
sgMIB.Cells[1, succ(i)] := MacAddr2Str( TMacAddress( bPhysAddr ), dwPhysAddrLen );
//网卡IP地址
sgMIB.Cells[2, succ(i)] := GetIPFromIFIndex( MIBArr[i].dwIndex);
end;
end;
end;
end.
你将你的email发短信给我,最好不要放这里,我怕看不到
代码统计的每秒的,你要改一下