我需要找到一个进程的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