C ++通过ProcessID获取进程名称

时间:2018-06-24 00:01:55

标签: python c++ winapi process win32gui

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

我尝试使用GetModuleFileNameExGetModuleFileNameGetProcessImageFileNameGetModuleBaseName,所有这些都导致乱码字符串,例如:{{1} }

我的代码:

╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ 7Σ

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

1 个答案:

答案 0 :(得分:0)

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

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

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

此外,您无需使用new来为DWORD分配GetWindowThreadProcessId()

尝试一下:

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);
}