Python - win32api GetModuleHandle错误“无法找到指定的模块”

时间:2013-11-06 21:09:06

标签: python winapi python-3.x pywin32

我正在使用下面的代码来获取有关正在运行的进程的一些信息。但是,我似乎无法使用模块名称来执行这些功能。例如,只要以下代码到达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.')

1 个答案:

答案 0 :(得分:1)

问题是你从不同的进程获取句柄,获取文件名,然后在你的进程中询问相同的文件名句柄。

除非你碰巧在你的过程中已经打开了模块,否则你的进程中 没有这样的句柄。正如GetModuleHandle文档所解释的那样,“模块必须由调用进程加载”(即由你)。

如果您想打开模块,请使用LoadLibrary

如果您想要其他进程的句柄......那么,您已经拥有。如果你需要获得具有不同访问权限的句柄,请解释你实际需要做什么,这可能是可行的。