63,594
社区成员




要获取进程的磁盘利用率和网络利用率,您需要使用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指令进行链接如上所示.
122
WMI