0

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

4

1 回答 1

1

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

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

如果要打开模块,请使用LoadLibrary.

如果你想要其他进程的句柄……好吧,你已经有了。如果您需要获得具有不同访问权限或其他内容的句柄,请解释您实际需要做什么,并且可能是可行的。

于 2013-11-06T21:40:57.873 回答