例如,我要从PID 10948中获取firefox.exe的进程名称
我尝试使用GetModuleFileNameEx
,GetModuleFileName
,GetProcessImageFileName
和GetModuleBaseName
,所有这些都导致乱码字符串,例如:{{1} }
我的代码:
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ 7Σ
最初,我尝试使用python使用win32gui库并使用进程的句柄来执行此操作,该句柄有效,但无法找到命令提示符句柄。只要我能够找到所有可能使用的程序的名称,我都不会在乎使用哪种语言来解决识别当前正在使用的程序的问题。
答案 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);
}