0
我正在嘗試彙總Qt中所有進程的列表。爲此,我使用Windows API。 下面的代碼演示了我的努力迄今:爲什麼GetProcessImageFileName返回null而不是進程的地址?
QList<QString> frmProcess::GetAllRunningProcesses()
{
HANDLE hSysSnapshot = NULL;
HANDLE processHandle;
PROCESSENTRY32 proc;
proc.dwSize = sizeof(proc);
hSysSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
Process32First(hSysSnapshot,&proc);
proc.dwSize = sizeof(proc);
ui->listWidget->clear();
LPWSTR processPath;
list.clear();
do
{
//This block of code is to get each process's path and store it in a list
//PROCESS_ALL_ACCESS is commented out since it fails the program on start-up
processHandle = OpenProcess(/*PROCESS_ALL_ACCESS*/PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, proc.th32ProcessID);
GetProcessImageFileName(processHandle,processPath,MAX_PATH);
procpaths.append(QString::fromWCharArray(processPath));
list.append(QString::fromWCharArray(proc.szExeFile));
} while(Process32Next(hSysSnapshot,&proc));
CloseHandle(hSysSnapshot);
return list;
}
在上面的代碼貼出來,我想獲得儘可能多的信息,我可以得到一個過程,對於這個我的幫助彙集進程名稱的CreateToolhelp32Snapshot
,然後通過GetProcessImageFileName
獲得他們的路徑。所有這些都發生在每個毫秒的計時器滴答事件中。
如果我運行該程序,幾秒鐘後它崩潰,我得到分段錯誤。
我也試過調試,因爲我無法獲得任何與任何進程相關的路徑!
而令我驚訝的是,我只能得到每個過程路徑的空字符串! 我在做什麼錯?
我試過LPWSTR processPath [MAX_PATH],但它給編譯時錯誤!陳述##################################### 錯誤:無法轉換'WCHAR ** {aka wchar_t (HANDLE,LPWSTR,DWORD)' GetProcessImageFileName(processHandle,processPath,MAX_PATH);參數'2'到'LPWSTR {aka wchar_t *}'的'**}'到'DWORD GetProcessImageFileNameW' ^ – Breeze
雖然你的解決方案工作得很好。如果名稱是unicode,TCHAR將無法將它們存儲正確? – Breeze
'TCHAR'與'GetProcessImageFileName'恰當匹配。如果你想使用'WCHAR'(出於某種原因我不知道),那麼你可以在'GetProcessImageFileNameW'中使用它。 –