C++代码不通过proc获取应用的pid
时间: 2023-12-06 12:39:30 浏览: 153
在C++中,可以使用Windows API函数来获取运行中应用程序的PID,而不必依赖于proc。以下是一个例子:
```c++
#include <Windows.h>
#include <string>
DWORD GetProcessIdByName(const std::wstring& processName)
{
DWORD processId = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32W pe32 = { 0 };
pe32.dwSize = sizeof(pe32);
if (Process32FirstW(hSnap, &pe32))
{
do
{
std::wstring exeFile(pe32.szExeFile);
if (exeFile == processName)
{
processId = pe32.th32ProcessID;
break;
}
} while (Process32NextW(hSnap, &pe32));
}
CloseHandle(hSnap);
}
return processId;
}
int main()
{
// 通过进程名获取PID
DWORD pid = GetProcessIdByName(L"notepad.exe");
if (pid != 0)
{
printf("notepad.exe的PID为:%d\n", pid);
}
else
{
printf("未找到notepad.exe进程!\n");
}
return 0;
}
```
该示例中的`GetProcessIdByName`函数以进程名作为参数,返回对应进程的PID。函数内部使用了Windows API中的`CreateToolhelp32Snapshot`和`Process32FirstW`/`Process32NextW`函数遍历系统中运行的进程列表,并逐一匹配进程名,直到找到对应的进程或遍历完整个列表。如果找到了对应的进程,则返回其PID;否则返回0。在`main`函数中,我们以`notepad.exe`作为例子来调用`GetProcessIdByName`函数,输出对应的PID。
阅读全文