我需要获取正在运行的程序的最新内存使用情况。我用谷歌搜索它,发现GetProcessMemoryInfo这看起来像我需要但我无法让它工作。 它不会拿到我为窗户找到的手柄,我不确定他们想要什么。
#include <iostream>
#include <Windows.h>
#include <tchar.h>
#include <Psapi.h>
using namespace std;
int main()
{
HANDLE hwnd = FindWindow(NULL,TEXT("Calculator"));
PPROCESS_MEMORY_COUNTERS ppsmemCounters;
DWORD cb;
BOOL WINAPI GetProcessMemoryInfo(hwnd, ppsmemCounters, cb);
return 0;
}
我现在正试图找到窗口的计算器。 我得到的一个错误是错误:类型“HANDLE”的值不能用于初始化实体类型“BOOL”。 另一个是“错误C2078:初始化程序太多”。 我使用的是VC ++ 2010,我的操作系统是Windows 7。
答案 0 :(得分:2)
GetProcessMemoryInfo
使用进程句柄,而不是窗口句柄。找到窗口后,您可以调用GetWindowThreadProcesId
进程ID,然后OpenProcess
来获取进程的句柄。然后,您最终可以为该句柄调用GetProcessMemoryInfo
。
当你打电话时,你不需要在开始时BOOL WINAPI
。您通常希望分配返回值,以便检查是否成功,例如:
bool succeded = GetProcessMemoryInfo(process, /* ... */);
编辑:这是一个非常简单的演示:
#include <windows.h>
#include <psapi.h>
#include <iostream>
int main(int argc, char **argv) {
HWND window = FindWindow(NULL, argv[1]);
DWORD id;
GetWindowThreadProcessId(window, &id);
HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, id);
PROCESS_MEMORY_COUNTERS info = {0};
info.cb = sizeof(info);
GetProcessMemoryInfo(process, &info, sizeof(info));
std::cout << info.WorkingSetSize;
return 0;
}