📄 netiphlp.cpp
字号:
//+NM Copyright (c) 2003 Qta
#include "stdafx.h"
#include "ITaskMgr.h"
#include "iphlpapi.h"
#include "netiphlp.h"
DWORD (pascal *GetIfTableX) (PMIB_IFTABLE,PULONG,BOOL);
//-------------------------------------------
// iphlpapi傪儘乕僪
//-------------------------------------------
int LoadGetIfTable ()
{
HINSTANCE hModule;
hModule = LoadLibrary (TEXT("iphlpapi.dll"));
if (hModule == NULL) {
GetIfTableX = NULL;
return FALSE;
}
GetIfTableX = (DWORD (pascal *) (PMIB_IFTABLE,PULONG,BOOL))
GetProcAddress (hModule, TEXT("GetIfTable"));
if (GetIfTableX == NULL) {
return FALSE;
}
return TRUE;
}
//-------------------------------------------
// 捠怣忣曬僥乕僽儖弶婜壔
//-------------------------------------------
void Ift_Init (struct _IFTDATA* ift)
{
LoadGetIfTable ();
memset (ift, 0, sizeof(struct _IFTDATA));
ift->dwSize = 16*1024;
ift->Table = (PMIB_IFTABLE) LocalAlloc (LPTR, ift->dwSize);
if (GetIfTableX) {
GetIfTableX (NULL, &ift->dwSize, FALSE);
ift->fSupport = TRUE;
}
else {
ift->fSupport = FALSE;
}
}
//-------------------------------------------
// 捠怣忣曬僥乕僽儖奐曻
//-------------------------------------------
void Ift_Term (struct _IFTDATA* ift)
{
if (ift->Table) LocalFree (ift->Table);
ift->Table = 0;
ift->dwSize = 0;
}
//-------------------------------------------
// 僔儞僌儖僶僀僩暥帤傪UNICODE傊
//-------------------------------------------
void bytetowchar (BYTE* s, TCHAR* c)
{
for (int i = 0; i < 62; i++) {
if (*s == 0) break;
*c = *s;
c++;
s++;
}
*c = 0;
}
//-------------------------------------------
// 捠怣忣曬傪庢摼
//-------------------------------------------
int Ift_Get (struct _IFTDATA* ift, int sec)
{
int bUpdate = FALSE;
if (GetIfTableX == NULL) return bUpdate;
int idx = 0;
int nEntries = ift->nEntries;
ift->dwSize = 16*1024;
if (ift->Table && GetIfTableX (ift->Table, &ift->dwSize, FALSE) == NO_ERROR) {
ift->nEntries = ift->Table->dwNumEntries;
for(; idx < (int)ift->Table->dwNumEntries && idx < MAX_NETTABLES; idx++) {
//愙懕偺柤徧
if (ift->nEntries != nEntries) {
ift->name[idx][0] = 0;
}
if (ift->Table->table[idx].wszName[0] > ' ') {
if (ift->name[idx][0] != ift->Table->table[idx].wszName[0]) {
lstrcpy (ift->name[idx], ift->Table->table[idx].wszName);
}
}
else
if (ift->Table->table[idx].bDescr[0] > ' ') {
if (ift->name[idx][0] != ift->Table->table[idx].bDescr[0]) {
bytetowchar (ift->Table->table[idx].bDescr, ift->name[idx]);
// int len = MultiByteToWideChar (CP_ACP, 0, (char*)ift->Table->table[idx].bDescr, -1, NULL, 0);
// if (len >= 64) len = 64-1;
// MultiByteToWideChar (CP_ACP, 0, (char*)ift->Table->table[idx].bDescr, -1, ift->name[idx], len);
}
}
else
if (ift->name[idx][0] == 0) {
lstrcpy (ift->name[idx], TEXT("<noname>"));
}
//庴怣僶僀僩----------------------
ift->r[idx].nByte = ift->Table->table[idx].dwInOctets / 1024;
//1昩娫偺庴怣僶僀僩悢
ift->r[idx].nRate = ift->Table->table[idx].dwInOctets - ift->r[idx].nBps;
ift->r[idx].nRate = ift->r[idx].nRate / sec;
//弖娫嵟戝抣奿擺(庴怣)
if (ift->nTime > 2 && ift->r[idx].nMax < ift->r[idx].nRate)
ift->r[idx].nMax = ift->r[idx].nRate;
ift->r[idx].nBps = ift->Table->table[idx].dwInOctets;
ift->r[idx].nPar[ift->nTime] = ift->r[idx].nRate;
//憲怣僶僀僩----------------------
ift->s[idx].nByte = ift->Table->table[idx].dwOutOctets / 1024;
//1昩娫偺憲怣僶僀僩悢
ift->s[idx].nRate = ift->Table->table[idx].dwOutOctets - ift->s[idx].nBps;
ift->s[idx].nRate = ift->s[idx].nRate / sec;
//弖娫嵟戝抣奿擺(憲怣)
if (ift->nTime > 2 && ift->s[idx].nMax < ift->s[idx].nRate)
ift->s[idx].nMax = ift->s[idx].nRate;
ift->s[idx].nBps = ift->Table->table[idx].dwOutOctets;
ift->s[idx].nPar[ift->nTime] = ift->s[idx].nRate;
//憲庴怣嫟捠----------------------
ift->nTime = (ift->nTime + 1) % MAX_NTIMES;
//僨乕僞揮憲検偑侽
if (ift->r[idx].nRate == 0)
ift->nZeroSpeed ++;
else
ift->nZeroSpeed = 0;
//堦掕帪娫捠怣偑峴傢傟側偐偭偨傜嵟戝抣僋儕傾
if (ift->nZeroSpeed >= MAX_NTIMES) {
ift->r[idx].nMax = 0;
ift->s[idx].nMax = 0;
}
}
}
else {
ift->nEntries = 0;
}
for(; idx < MAX_NETTABLES; idx++) {
ift->r[idx].nRate = 0;
}
if (ift->nEntries == 0) {
ift->nComNo = 0;
ift->nZeroSpeed = MAX_NTIMES;
}
if (ift->nZeroSpeed < 4)
bUpdate = TRUE;
return bUpdate;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -