C++ 从进程名称获取进程的ID

C++ 从进程名称获取进程的ID,c++,C++,我需要找到一个进程的ID,我只知道它的名称,我知道一次只运行一个实例,所以多个进程与我要查找的进程同名不会有问题 如果有人能解释我如何从进程的名称中获取进程的ID,我将不胜感激。代码示例将非常精彩。从您的其他问题来看(RegSetValueEx在标题中显得有些明显),我将假定您在Windows上。对于纯Windows API解决方案,您可以使用Toolhelp32 API查看正在运行的进程的快照,并将它们的名称与您要查找的名称进行比较。您只有一个名字的注释,但是将来,或者对其他人来说,为该名字提

我需要找到一个进程的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
std::向量pid;
HANDLE snap=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,0)//所有过程
PROCESSENTRY32W条目//当前进程
entry.dwSize=条目的大小;
如果(!Process32FirstW(snap,&entry)){//从快照中的第一个开始
返回0;
}
做{
if(std::wstring(entry.szExeFile)==wantedProcessName){
pids.emplace_back(entry.th32ProcessID);//名称匹配;添加到列表
}
}while(Process32NextW(捕捉和输入))//继续,直到快照结束

在*nix环境中,
man3sysctl

哪个操作系统?Boost可能有,我不知道。这不是很有用,你能添加示例代码和解释让它更清晰吗。请参阅示例。感谢Chris的回答,但我在编译过程中遇到了一个错误。-<代码>错误1错误C2440:'':无法从“WCHAR[260]”转换为“std::string”main.cpp 32 1 mainAdvice?@user1661022,如果您使用的是
TCHAR
TEXT
等,我建议改为使用类似
lstrcmp
的内容。如果您只是使用宽字符串,请使用
std::wstring
但是,当进入到代码的这一部分时,我的应用程序只是关闭,没有错误消息。@user1661022,我几乎可以肯定这段代码中没有错误。你能发布一个完整程序的链接吗?值得一提的是,我必须在声明条目之后添加entry.dwSize=sizeof(PROCESSENTRY32);才能工作。