我正在使用下面的代码来获取有关正在运行的进程的一些信息。但是,我似乎无法使用模块名称来执行这些功能。例如,只要以下代码到达win32api.GetModuleHandle(fileName)
,它就会崩溃,说明the specified module could not be found
。关于如何解决这个问题的任何建议?非常感谢!
代码:
processName = "MyProcess"
PROCESS_ALL_ACCESS = 0x1F0FFF
hwnd = win32ui.FindWindow(None, processName).GetSafeHwnd()
pid = win32process.GetWindowThreadProcessId(hwnd)[1]
processHandle = win32api.OpenProcess(PROCESS_ALL_ACCESS, False, pid)
modules = win32process.EnumProcessModules(processHandle)
for module in modules:
fileName = win32process.GetModuleFileName(processHandle, module)
print('{:08X}'.format(module))
print(fileName)
print(win32api.GetModuleHandle(fileName))
processHandle.close()
修改
第一个答案让我意识到我的“无法找到指定的模块”有点含糊不清。这是一个win32模块错误,而不是python模块错误。一切都被导入到python中(我为了简洁而省略了导入)。问题在于行print(win32api.GetModuleHandle(fileName))
。更详细的错误是pywintypes.error: (126, 'GetModuleHandle', 'The specified module could not be found.')
答案 0 :(得分:1)
问题是你从不同的进程获取句柄,获取文件名,然后在你的进程中询问相同的文件名句柄。
除非你碰巧在你的过程中已经打开了模块,否则你的进程中 没有这样的句柄。正如GetModuleHandle
文档所解释的那样,“模块必须由调用进程加载”(即由你)。
如果您想打开模块,请使用LoadLibrary
。
如果您想要其他进程的句柄......那么,您已经拥有。如果你需要获得具有不同访问权限的句柄,请解释你实际需要做什么,这可能是可行的。