我使用下面的代码来获取一些有关运行进程的信息。然而,我似乎在使用模块名来实现函数时遇到了困难。例如,一旦下面的代码到达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.')
问题是,您从一个不同的进程获取一个句柄,获取其文件名,然后在您的进程中请求相同文件名的句柄。在
除非您碰巧已经在您的进程中打开了模块,否则在您的进程中,没有这样的句柄。正如^{} 文档解释的那样,“模块必须是由调用进程加载的”(也就是说,由您来加载)。在
如果要打开模块,请使用^{} 。在
如果你想要另一个进程的句柄…那么,你已经有了。如果你需要一个具有不同访问权限的句柄或其他东西,解释一下你实际需要做什么,这可能是可行的。在
相关问题 更多 >
编程相关推荐