资源简介
网速流量监控 悬浮窗口
代码片段和文件信息
#include “stdafx.h“
#include “MFNetTraffic.h“
#include “float.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#include “winperf.h“
MFNetTraffic::MFNetTraffic()
{
lasttraffic = 0.0;
CurrentInterface = -1;
CurrentTrafficType = AllTraffic;
GetInterfaces();
}
MFNetTraffic::~MFNetTraffic()
{
}
PERF_object_TYPE *Firstobject(PERF_DATA_BLOCK *dataBlock)
{
return (PERF_object_TYPE *) ((BYTE *)dataBlock + dataBlock->HeaderLength);
}
PERF_object_TYPE *Nextobject(PERF_object_TYPE *act)
{
return (PERF_object_TYPE *) ((BYTE *)act + act->TotalByteLength);
}
PERF_COUNTER_DEFINITION *FirstCounter(PERF_object_TYPE *perfobject)
{
return (PERF_COUNTER_DEFINITION *) ((BYTE *) perfobject + perfobject->HeaderLength);
}
PERF_COUNTER_DEFINITION *NextCounter(PERF_COUNTER_DEFINITION *perfCounter)
{
return (PERF_COUNTER_DEFINITION *) ((BYTE *) perfCounter + perfCounter->ByteLength);
}
PERF_COUNTER_BLOCK *GetCounterBlock(PERF_INSTANCE_DEFINITION *pInstance)
{
return (PERF_COUNTER_BLOCK *) ((BYTE *)pInstance + pInstance->ByteLength);
}
PERF_INSTANCE_DEFINITION *FirstInstance (PERF_object_TYPE *pobject)
{
return (PERF_INSTANCE_DEFINITION *) ((BYTE *) pobject + pobject->DefinitionLength);
}
PERF_INSTANCE_DEFINITION *NextInstance (PERF_INSTANCE_DEFINITION *pInstance)
{
PERF_COUNTER_BLOCK *pCtrBlk = GetCounterBlock(pInstance);
return (PERF_INSTANCE_DEFINITION *) ((BYTE *)pInstance + pInstance->ByteLength + pCtrBlk->ByteLength);
}
char *WideToMulti(wchar_t *source char *dest int size)
{
WideCharToMultiByte(CP_ACP 0 source -1 dest size 0 0);
return dest;
}
//得到接口号为interfaceNumber的接口流量
double MFNetTraffic::GetTraffic(int interfaceNumber)
{
try
{
#define DEFAULT_BUFFER_SIZE 40960L
POSITION pos;
CString InterfaceName;
pos = Interfaces.FindIndex(interfaceNumber);
if(pos==NULL)
return 0.0;
//得到当前的接口名字
InterfaceName = Interfaces.GetAt(pos);
//为性能数据缓冲
unsigned char *data = new unsigned char [DEFAULT_BUFFER_SIZE];
// 从RegQueryValueEx返回的值:本例中忽略改变量
DWORD type;
// 缓冲的尺寸
DWORD size = DEFAULT_BUFFER_SIZE;
// RegQueryValueEx返回的值
DWORD ret;
// 从网络对象(索引是510)查询性能数据
while((ret = RegQueryValueEx(
HKEY_PERFORMANCE_DATA “510“ NULL &type data &size)) != ERROR_SUCCESS)
{
if(ret == ERROR_MORE_DATA)
{
// 缓冲尺寸太小,增加内存分配
size += DEFAULT_BUFFER_SIZE;
delete [] data;
data = new unsigned char [size];
}
else
{
// 未定义的错误
return 1;
}
}
//性能数据块
PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data;
//枚举链表中第一个对象
PERF_object_TYPE *objectPtr = Firstobject(dataBlockPtr);
//遍历链表
for(int a=0 ; a<(int)dataBlockPtr->NumobjectTypes ; a++)
{
char nameBuffer[255];
// 判断是否是网络对象索引号是510
if(objectPtr->objectNametitleIndex == 510)
{
// 偏移变量
DWORD processIdOffset = ULONG_MAX;
// 找到第一个计数器
PERF_COUN
相关资源
- ManageEngine_OpManager_12.3安装手册+管理员
- honeywell半球枪式监控搜索软件
- IP数据包流量监控VC 源码
- USB助手(调试USB通信协议的工具) 源
- 键盘输入监控
- 基于WiFi技术的矿井信号收发器设计
- 基于Linux、QT的视频监控系统的设计与
- 基于PLC和组态软件的变频器监控系统
- 基于SPCE061A的无线环境监控系统设计
- 监控DAV播放器纯绿色免安装版
- 基于Blackfin的无线IP视频监控解决方案
- 消防指示灯智能监控系统三端口网关
- 物联网家居系统中基于单片机的多路
- 旋转活塞式流量计的测量原理
- 幼儿园手机视频监控应用方案
- EonStor磁盘阵列扩展东城区看守所监控
- 基于μC/OS-Ⅱ的通信电源监控系统的
- Infortrend SAN针对CCTV安全监控解决方案
- Infortrend EonStor磁盘阵列保证公安监控
- GSM监控系统51单片机设计
- 企业消息交换监控系统产品
- 基于Zigbee的土壤墒情监控系统设计
- 监控专用MP4文件播放器
- 基于Arduino的智能环境监控系统设计
- 基于LabVIEW平台和网络的计算机远程在
- free-serial-port-monitor_(串口监控调试)
- 基于工业以太网的嵌入式视频监控系
- N = 1 $$ \\ mathcal {N} = 1 $$变形,RG流量为
- 易语言磁盘IO性能监控源码
- 梭子鱼负载均衡方案从容应对网络视
评论
共有 条评论