【发布时间】:2013-11-06 21:09:05
【问题描述】:
我正在使用下面的代码来获取有关正在运行的进程的一些信息。但是,我似乎无法使用模块名称来执行功能。例如,一旦下面的代码到达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.')
【问题讨论】:
-
您究竟想在这里做什么,而仅使用原始
module值是无法做到的? -
@abamert:我当时实际上只是在玩弄这些功能,想知道哪里出了问题。我最终会想要获得用于 ReadProcessMemory 目的的进程的基地址,但这不是我在这里专门做的。
-
如果您正在尝试构建一个作弊程序或培训师制造商,您可能想要搜索已经存在的内容。那里有多个模块,虽然它们可能不完整和/或过时,但有很多有用的资源可以显示如何完成大部分困难部分。 (其中一个是我大约十年前放弃的一个项目,它包含了 OS X、linux 2.x 和 Win32 中的类似功能,后来我发现其他人已经分叉并恢复了它,但后来又放弃了……不幸的是,我可以'不记得他的叉子的名字。)
-
@abarnert:我正在努力获取一些东西来读取游戏值,但特别是为了我可以为游戏编写一个 AI。我想一个 python 模块可以将工作从与进程的连接中取出并读取所有必要的内存会很有用,但我需要从那里获取 if。
标签: python winapi python-3.x pywin32