gpt4 book ai didi

c++ - 在获取程序的当前内存方面需要帮助

转载 作者:行者123 更新时间:2023-11-28 03:52:43 44 4
gpt4 key购买 nike

我需要获取正在运行的程序的最新内存使用情况。我用谷歌搜索并找到GetProcessMemoryInfo这看起来像我需要的,但我无法让它工作。它不会占用我为窗口找到的 Handlebars ,我不确定他们想要什么。

#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。

最佳答案

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

关于c++ - 在获取程序的当前内存方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4870893/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com