c/c++如何编程获取windows性能监视器下面的网卡名

绉咣晾 2017-10-18 10:50:32
我在做一个小程序,需要获取每张启用网卡的实时上传速度和下载速度.
我用了GetAdaptersInfo()函数获取了每张网卡的信息.存放信息的结构体如下:
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO


然后调用PdhAddCounter性能计数器,传入网卡的适配器描述获取网卡的网速IO;
但是我发现我获取到的网卡名(描述)和性能监视器下的网卡名不一样(个别一样).
而PdhAddCounter必须使用性能监视器下的网卡名才能获得对应的网卡数据.

一开始我以为是编码字符集或者PdhAddCounter性能计数器用法的错误,但是后来都排除掉了,
事实就是我没有获取到正确的网卡名.
有哪位大神知道正确获取性能监视器下的网卡名的方法或者函数?

...全文
1120 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
步-沧 2018-11-13
  • 打赏
  • 举报
回复
可以直接用PDH里面的PdhEnumObjectItems函数获得对应计数器的实例对象。参考MSDN。https://docs.microsoft.com/en-us/windows/desktop/perfctrs/browsing-counters
赵4老师 2017-10-19
  • 打赏
  • 举报
回复
引用 1 楼 smwhotjay 的回复:


传送门 https://github.com/344717871/networkmonitor



我写的流量监控软件, GetAdaptersInfo 那些。



代码都有

绉咣晾 2017-10-19
  • 打赏
  • 举报
回复
谢谢各位了,问题解决了.我用了GetIfEntry ()的方案,没有用计数器.
smwhotjay 2017-10-18
  • 打赏
  • 举报
回复


传送门 https://github.com/344717871/networkmonitor



我写的流量监控软件, GetAdaptersInfo 那些。



代码都有
阿源是少年 2017-10-18
  • 打赏
  • 举报
回复
楼上代码我看过,不复杂啊
绉咣晾 2017-10-18
  • 打赏
  • 举报
回复
引用 1 楼 smwhotjay 的回复:
大神的代码太全太复杂了,类里来类里去的....我对c++不熟 不知道该怎么移植代码.或者要是有根据网卡的index获取实时收发网速的Api就好了类似GetIfEntry ()这样的

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧