我需要找到一個進程的ID,我只有它的名字,我知道只有一個實例會一次運行,所以不會有多個問題進程與我正在尋找的同名進程。獲取進程的ID從進程名稱
如果有人能解釋我如何才能從名字中獲得進程的ID,那麼我將不勝感激 - 代碼示例將非常出色。
我需要找到一個進程的ID,我只有它的名字,我知道只有一個實例會一次運行,所以不會有多個問題進程與我正在尋找的同名進程。獲取進程的ID從進程名稱
如果有人能解釋我如何才能從名字中獲得進程的ID,那麼我將不勝感激 - 代碼示例將非常出色。
從你的其他問題來看(RegSetValueEx
在標題中有點顯而易見),我假設你在Windows上。對於純粹的Windows API解決方案,您可以使用Toolhelp32 API瀏覽正在運行的進程的快照,並將其名稱與您正在查找的名稱進行比較。您對只有一個名字的紙條,但它可能在未來是有益的,或者給別人,擁有該名稱的所有PID,所以我會做到這一點:
std::vector<DWORD> pids;
HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //all processes
PROCESSENTRY32W entry; //current process
entry.dwSize = sizeof entry;
if (!Process32FirstW(snap, &entry)) { //start with the first in snapshot
return 0;
}
do {
if (std::wstring(entry.szExeFile) == wantedProcessName) {
pids.emplace_back(entry.th32ProcessID); //name matches; add to list
}
} while (Process32NextW(snap, &entry)); //keep going until end of snapshot
感謝Chris的回答,但是我在編譯過程中遇到錯誤。 - 錯誤1 \t錯誤C2440:'
@ user1661022,如果你使用'TCHAR'和'TEXT'等等,我會建議像'lstrcmp'這樣的代替。如果你只是使用寬字符串,使用'std :: wstring'。 – chris
我試過這樣做(我把它改成了'(wstring(entry.szExeFile)== L「test.exe」)'但是當我得到這部分代碼時,我的應用程序只是關閉而沒有錯誤消息 – Ryan
哪個操作系統? Boost可能有它,我不知道。 – chris