2013-02-25 46 views
1

我一直在试图获取Windows中的进程内存信息,我一直在关注微软文档,我已经得到了这段代码,但它似乎并不工作。它应该打印成功,但它根本不打印任何东西。我的调试告诉我,因为hProcess = null, ,但我不明白为什么。这是我当前的代码获取进程内存信息

#include <windows.h> 
#include <stdio.h> 
#include <psapi.h> 
#include<iostream> 

using namespace std; 

int main() 
{ 
    DWORD aProcesses[1024], cbNeeded, cProcesses; 

    if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) 
    { 
     return 1; 
    } 

    cProcesses = cbNeeded/sizeof(DWORD); 

    for (int i = 0; i < cProcesses; i++) 
    { 
    int processID = aProcesses[i]; 
    HANDLE hProcess; 
    PROCESS_MEMORY_COUNTERS pmc; 
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID); 

    if (NULL == hProcess) 
     return 2; 

    if (GetProcessMemoryInfo(hProcess, &pmc, sizeof(pmc))) 
    { 
     cout<<"SUCCEEDED"; 
    } 

    CloseHandle(hProcess); 
    } 

    return 0; 
} 
+2

尝试在'cout'中添加'<< flush;'或'<< endl;'这一行 - 它可能会打印出来,只是不会将其刷到控制台上。 – 2013-02-25 23:14:17

+0

不是程序返回的问题2 – 2013-02-25 23:15:44

+0

您的for循环可能会返回得太早。如果OpenProcess()返回0,那么如果你跳过'GetProcessMemoryInfo()'和'CloseHandle()'会怎么样? – 2013-02-25 23:15:48

回答

1

您可能没有权限读取某些(特权系统)进程的内存。如果从OpenProcess得到NULL句柄,请检查GetLastError

在一般情况下,检查和处理Win32错误条件是一种很好的做法,即使API'通常'适用于您。