C++ 通过进程 ID 获取进程的名称

C++ Getting the Name of a Process via ProcessID

本文关键字:取进程 获取 ID 进程 C++      更新时间:2023-10-16

例如,从PID 10948中,我想获取Firefox的进程名称.exe

我尝试使用GetModuleFileNameExGetModuleFileNameGetProcessImageFileNameGetModuleBaseName,所有这些都会导致一个垃圾字符串,例如:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ 7Σ

我的代码:

DWORD* thread = new DWORD;
TCHAR szName[_MAX_FNAME];
HANDLE processhandle = OpenProcess(PROCESS_QUERY_INFORMATION, false, GetWindowThreadProcessId(GetForegroundWindow(), thread));
GetProcessImageFileName(processhandle, szName, _MAX_FNAME);
strrchr(szName, '');

最初,我尝试使用 python 使用 win32gui 库使用进程句柄执行此操作,这有效,但它无法找到命令提示句柄。我不在乎我使用哪种语言来解决识别当前正在使用的程序的问题,只要我能够找到我可以使用的所有程序的名称。

如果失败OpenProcess()则返回NULL。致电GetLastError()了解原因。与GetProcessImageFileName()相同。

此外,请尝试改用PROCESS_QUERY_LIMITED_INFORMATION,因为它需要的权限较少。

此外,您应该在填充之前将szName缓冲液清零。

此外,您无需使用newGetWindowThreadProcessId()分配DWORD

试试这个:

DWORD threadid;
DWORD processid = GetWindowThreadProcessId(GetForegroundWindow(), &threadid);
HANDLE processhandle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, processid);
if (!processhandle) {
// handle error as needed...
}
else {
TCHAR szName[_MAX_FNAME] = {};
if (!GetProcessImageFileName(processhandle, szName, _MAX_FNAME)) {
// handle error as needed...
}
// ...
CloseHandle(processhandle);
}