C++ Windows系统实时检测进程的磁盘占用率
时间: 2024-11-15 16:22:21 浏览: 1
在C++中,要在Windows系统上实时监测进程的磁盘占用率,你可以利用WinAPI函数和一些操作系统特性。首先,你需要包含`<windows.h>`头文件,并创建一个监听线程来定期获取磁盘统计信息。
以下是一个简单的示例,使用`GetDiskFreeSpaceEx`函数获取总空间、可用空间以及当前路径的磁盘占用情况:
```cpp
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
// 获取磁盘使用百分比
double GetDiskUsage(const TCHAR* path)
{
ULARGE_INTEGER totalSize;
ULARGE_INTEGER freeSize;
ULARGE_INTEGER usableSize;
if (GetDiskFreeSpaceEx(path, &totalSize, &freeSize, &usableSize) == FALSE)
return -1; // 错误处理
double percentUsed = 100 * ((double)(totalSize.QuadPart - usableSize.QuadPart)) / totalSize.QuadPart;
return percentUsed;
}
void MonitorDiskUsage()
{
std::string currentProcessName = L"YourProcessName"; // 替换为你想要监控的进程名
HANDLE processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, GetCurrentProcessId()); // 获取当前进程句柄
if (processHandle == nullptr)
{
// 处理错误
return;
}
while (true)
{
PROCESSENTRY32 pe32 = { 0 };
pe32.dwSize = sizeof(PROCESSENTRY32);
if (!EnumProcesses(&pe32, 1, &pe32.dwProcessCount))
{
// 处理错误
continue;
}
for (size_t i = 0; i < pe32.dwProcessCount; ++i)
{
if (wcscmp(pe32.szProcess, currentProcessName.c_str()) == 0)
{
// 使用CreateToolhelp32Snapshot创建进程快照
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (snapshot != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32W processEntry = pe32;
processEntry.dwSize = sizeof(PROCESSENTRY32W);
if (Process32First(snapshot, &processEntry))
{
do
{
// 计算进程的工作目录作为可能的磁盘路径
wchar_t szPath[MAX_PATH];
if (GetModuleFileNameEx(snapshot, processEntry.hProcess, szPath, MAX_PATH))
{
double usage = GetDiskUsage(szPath);
// 打印或记录磁盘使用情况
printf("Process %ls has disk usage: %.2f%%\n", processEntry.szExeFile, usage);
}
} while (Process32Next(snapshot, &processEntry));
}
CloseHandle(snapshot);
}
}
}
Sleep(5000); // 每隔5秒检查一次
}
}
int main()
{
MonitorDiskUsage();
return 0;
}
```
阅读全文