2013-02-25 106 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'通常'適用於您。