Python win32api GetModuleHandle错误“找不到指定的模块”

2024-10-05 14:27:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面的代码来获取一些有关运行进程的信息。然而,我似乎在使用模块名来实现函数时遇到了困难。例如,一旦下面的代码到达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 fine中(为了简洁起见,我省略了导入)。问题出在print(win32api.GetModuleHandle(fileName))行。更详细的错误是pywintypes.error: (126, 'GetModuleHandle', 'The specified module could not be found.')


Tags: 模块代码错误notbefilenamecouldmodule
1条回答
网友
1楼 · 发布于 2024-10-05 14:27:17

问题是,您从一个不同的进程获取一个句柄,获取其文件名,然后在您的进程中请求相同文件名的句柄。在

除非您碰巧已经在您的进程中打开了模块,否则在您的进程中,没有这样的句柄。正如^{}文档解释的那样,“模块必须是由调用进程加载的”(也就是说,由您来加载)。在

如果要打开模块,请使用^{}。在

如果你想要另一个进程的句柄…那么,你已经有了。如果你需要一个具有不同访问权限的句柄或其他东西,解释一下你实际需要做什么,这可能是可行的。在

相关问题 更多 >