ReadProcessMemory读取一个空字符串

时间:2014-12-28 00:15:53

标签: python python-2.7 pywin32 win32gui activepython

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

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

  

如果控件与代码处于同一个进程中,它应该可以正常工作。如果它处于不同的过程中(如#34;另一个应用程序"建议),那么这不起作用(或者至少它不应该)。检查错误代码,您应该得到“#34;许可被拒绝"

的内容。”

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

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

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

以下是具有相同问题的某个人的示例,其中listview位于另一个进程中,因此无法直接阅读:

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

答案 1 :(得分:0)

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

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

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

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