问下win10任务管理器中的磁盘利用率和网络利用率用VC怎么获取?

wuxiao0313 2023-05-23 14:04:45

 

就是图片上的磁盘和网络的利用率 

 

 

...全文
164 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
coder2038 2023-05-24
  • 打赏
  • 举报
回复 1

要获取进程的磁盘利用率和网络利用率,您需要使用Windows Performance Counter API。以下是一些示例代码:

#include <windows.h>
#include <pdh.h>
#include <pdhmsg.h>

#pragma comment(lib, "pdh.lib")

// 获取进程的磁盘利用率
double GetProcessDiskUsage(DWORD processId)
{
    PDH_HQUERY query;
    PDH_HCOUNTER counter;
    PDH_STATUS status;
    WCHAR path[MAX_PATH];
    WCHAR counterName[MAX_PATH];
    DWORD bufSize = MAX_PATH;

    // 构造计数器路径
    swprintf_s(path, MAX_PATH, L"\\Process(%u)\\IO Data Bytes/sec", processId);

    // 打开查询
    status = PdhOpenQuery(NULL, 0, &query);
    if (status != ERROR_SUCCESS) {
        return -1.0;
    }

    // 添加计数器
    status = PdhAddCounter(query, path, 0, &counter);
    if (status != ERROR_SUCCESS) {
        PdhCloseQuery(query);
        return -1.0;
    }

    // 收集计数器数据
    status = PdhCollectQueryData(query);
    if (status != ERROR_SUCCESS) {
        PdhCloseQuery(query);
        return -1.0;
    }

    // 获取计数器值
    PDH_FMT_COUNTERVALUE value;
    status = PdhGetFormattedCounterValue(counter, PDH_FMT_DOUBLE, NULL, &value);
    if (status != ERROR_SUCCESS) {
        PdhCloseQuery(query);
        return -1.0;
    }

    // 关闭查询
    PdhCloseQuery(query);

    // 返回计数器值
    return value.doubleValue;
}

// 获取进程的网络利用率
double GetProcessNetworkUsage(DWORD processId)
{
    PDH_HQUERY query;
    PDH_HCOUNTER counter;
    PDH_STATUS status;
    WCHAR path[MAX_PATH];
    WCHAR counterName[MAX_PATH];
    DWORD bufSize = MAX_PATH;

    // 构造计数器路径
    swprintf_s(path, MAX_PATH, L"\\Process(%u)\\IO Other Bytes/sec", processId);

    // 打开查询
    status = PdhOpenQuery(NULL, 0, &query);
    if (status != ERROR_SUCCESS) {
        return -1.0;
    }

    // 添加计数器
    status = PdhAddCounter(query, path, 0, &counter);
    if (status != ERROR_SUCCESS) {
        PdhCloseQuery(query);
        return -1.0;
    }

    // 收集计数器数据
    status = PdhCollectQueryData(query);
    if (status != ERROR_SUCCESS) {
        PdhCloseQuery(query);
        return -1.0;
    }

    // 获取计数器值
    PDH_FMT_COUNTERVALUE value;
    status = PdhGetFormattedCounterValue(counter, PDH_FMT_DOUBLE, NULL, &value);
    if (status != ERROR_SUCCESS) {
        PdhCloseQuery(query);
        return -1.0;
    }

    // 关闭查询
    PdhCloseQuery(query);

    // 返回计数器值
    return value.doubleValue;
}

这些函数将分别返回指定进程的磁盘利用率和网络利用率。请注意,您需要将PDH库添加到您的项目中,并使用#pragma指令进行链接如上所示.

wuxiao0313 2023-05-24
  • 举报
回复
@coder2038 多谢了 才看到您的回复 我这也是用PDH完成的 非常感谢
Qintianyu123 2023-05-24
  • 打赏
  • 举报
回复

122

Qintianyu123 2023-05-24
  • 举报
回复
@Qintianyu123 333
赵4老师 2023-05-24
  • 打赏
  • 举报
回复

WMI

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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