c++服务通过进程名获取进程ID
时间: 2023-10-30 19:04:43 浏览: 45
在 C++ 中,可以使用 Windows API 函数 `CreateToolhelp32Snapshot` 和 `Process32First` / `Process32Next` 来获取进程列表,并通过比较进程名称来获取进程 ID。以下是一个示例代码:
```c++
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
#include <string>
DWORD GetProcessIDByName(const std::wstring& processName)
{
DWORD processID = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
{
return 0;
}
PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
if (Process32First(hSnapshot, &pe32))
{
while (Process32Next(hSnapshot, &pe32))
{
if (_wcsicmp(pe32.szExeFile, processName.c_str()) == 0)
{
processID = pe32.th32ProcessID;
break;
}
}
}
CloseHandle(hSnapshot);
return processID;
}
int main()
{
std::wstring processName = L"notepad.exe";
DWORD processID = GetProcessIDByName(processName);
if (processID != 0)
{
std::cout << "Process " << processName << " has ID " << processID << std::endl;
}
else
{
std::cout << "Process " << processName << " not found" << std::endl;
}
return 0;
}
```
该代码将根据进程名 `"notepad.exe"` 获取进程 ID,如果找到进程,则输出进程名和进程 ID,否则输出进程未找到的消息。请注意,此代码仅适用于 Windows 平台。