c++代码有哪些获取app的pid得方法
时间: 2023-10-30 16:05:56 浏览: 98
在C++中,可以使用以下方法获取正在运行的应用程序的PID:
1. 使用Windows API函数EnumProcesses()和GetModuleBaseName(),可以列举所有正在运行的进程,并获取指定进程的名称和PID。具体实现可以参考以下代码:
```c++
#include <windows.h>
#include <psapi.h>
void getProcessIdByName(const char* processName, DWORD& processId)
{
DWORD processes[1024], cbNeeded, cProcesses;
if (!EnumProcesses(processes, sizeof(processes), &cbNeeded))
return;
cProcesses = cbNeeded / sizeof(DWORD);
for (unsigned int i = 0; i < cProcesses; i++)
{
if (processes[i] != 0)
{
HMODULE hMod;
DWORD cbNeeded;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processes[i]);
if (hProcess)
{
if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
{
char szProcessName[MAX_PATH];
if (GetModuleBaseNameA(hProcess, hMod, szProcessName, sizeof(szProcessName)))
{
if (_stricmp(szProcessName, processName) == 0)
{
processId = processes[i];
CloseHandle(hProcess);
return;
}
}
}
CloseHandle(hProcess);
}
}
}
}
```
2. 使用Windows API函数CreateToolhelp32Snapshot()和Process32First(),可以枚举所有正在运行的进程,并获取指定进程的名称和PID。具体实现可以参考以下代码:
```c++
#include <windows.h>
#include <tlhelp32.h>
void getProcessIdByName(const char* processName, DWORD& processId)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
return;
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe32))
{
do
{
if (_stricmp(pe32.szExeFile, processName) == 0)
{
processId = pe32.th32ProcessID;
CloseHandle(hSnapshot);
return;
}
} while (Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
}
```
以上两种方法都可以通过指定应用程序的名称来获取其PID。如果需要获取当前进程的PID,可以使用Windows API函数GetCurrentProcessId()。