【问题标题】:ReadProcessMemory reads an empty stringReadProcessMemory 读取一个空字符串
【发布时间】:2014-12-28 00:15:52
【问题描述】:

我正在尝试使用 win32gui 读取桌面图标的文本(我必须使用 win32,因为我还需要获取图标的位置并且它们应该与文本匹配)。

我在这里使用了代码:Use Python to extract ListView items from another application,它返回了一个包含空字符串的列表。我尝试检查返回码和其他值,它们都有意义。

如果控件与您的代码在同一进程中,它应该可以工作。如果它在不同的过程中(如“另一个应用程序”所建议的那样),那么这不起作用(或者至少它不应该)。检查错误代码,您应该得到类似于“权限被拒绝”的内容。

但桌面处于不同的进程中,我没有收到错误代码!

为了获得桌面窗口的句柄,我使用了我在解决方案部分中发布的get_desktop() 函数:How to get desktop item count in python?

有什么想法吗?谢谢!

【问题讨论】:

  • 嗯...让我想起了游戏教练。
  • 游戏培训师使用 readprocessmemory 和 writeprocessmemory 通过重写内存来破解游戏。 Soo 跑题了,但是什么
  • 哦酷没想到

标签: python python-2.7 pywin32 win32gui activepython


【解决方案1】:

我找到了答案!错误的是 LVITEM 结构。

我使用的结构是 32 位架构,但我的计算机是 64 位(python 是 32 位但没关系)。

这个forum 有汇编答案。这是后续question,其中包含python中的结构。

基本上,stateMask 字段必须为 64 位长,所有指针也应为 64 位长(pszTextpuColumnspiColFmt)以及 lParam。我不明白为什么 stateMask 应该是 64 位,但这就是后续问题的目的。

【讨论】:

    【解决方案2】:

    这是一个遇到相同问题的人的示例,其中列表视图位于另一个进程中,因此无法直接读取:

    http://www.xiandg.com/2094118/codep1/get-text-of-lvitem-with-lvmgetitem-and-sendmessage-in-c

    答案:

    因为包含文本的内存块是属于对方的 过程中,您将需要一些技巧来编组文本 进程进入你的进程。

    该过程在此处详细说明:http://taylorza.blogspot.com/2009/08/archive-hacking-my-way-across-process.html

    【讨论】:

    • 谢谢,但我还在苦苦挣扎,我发布的链接中的代码缺少什么? (使用 Python 从另一个应用程序中提取 ListView 项)
    • 我成功地手动写入该块并读取它(该块在另一个进程中)。所以问题出在 SendMessage 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2012-06-06
    • 2012-04-08
    相关资源
    最近更新 更多