需要帮助获取程序的当前内存

时间:2011-02-02 04:53:28

标签: c++ windows

我需要获取正在运行的程序的最新内存使用情况。我用谷歌搜索它,发现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。

1 个答案:

答案 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;
}