void TraverseProcess(std::map<std::wstring, int>& processMap)
{
HANDLE hSnap{ CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) };
if (hSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 processEntry;
processEntry.dwSize = sizeof(processEntry);
//std::wcout.imbue(std::locale("chs"));
if (Process32First(hSnap, &processEntry))
do
{
//std::wcout << "[进程:" << processEntry.szExeFile << "|PID:" << processEntry.th32ProcessID << "]" << std::endl;
processMap.insert(std::pair<std::wstring, int>(processEntry.szExeFile, processEntry.th32ProcessID));
}while (Process32Next(hSnap, &processEntry));
}
if(hSnap)
CloseHandle(hSnap);
}
DWORD GetProcessID(const wchar_t* processName)
{
std::map<std::wstring, int>processMap;
TraverseProcess(processMap);
if (processMap[processName])
return processMap[processName];
return false;
}
如果对于比遍历进程函数使用std::map有不一样的需求,可以自行替换.
比如自写hashmap.
只要确保自己重写了[]运算符,让其能索引即可.
当然,也可以将获取进程ID函数也进行修改以进行适配.
下面是运行效果.
根据进程名返回PID.
遍历进程函数打印结果
注意,程序是32位,则只会找到32位进程