Нужна помощь с получением текущей памяти в программе - PullRequest
0 голосов
/ 02 февраля 2011

Мне нужно получить актуальное использование памяти запущенной программы.Я погуглил его и нашел 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 Ответ

2 голосов
/ 02 февраля 2011

GetProcessMemoryInfo принимает дескриптор процесса , а не дескриптор окна. После того как вы найдете окно, вы можете вызвать GetWindowThreadProcesId для идентификатора процесса, затем 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...