2014-12-28 39 views
0

我想使用win32gui来读取桌面图标的文本(我必须使用win32,因为我还需要获取图标的位置,它们应该与文本匹配)。ReadProcessMemory读取一个空字符串

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

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

但是,桌面是在一个不同的过程,我没有错误代码!

为了得到我所用的get_desktop()功能,我在解决部分张贴在这里的桌面窗口的句柄:How to get desktop item count in python?

任何想法?谢谢!

+0

嗯......让我想起了一个游戏教练。 –

+0

.......呵? ^^“ –

+0

游戏培训者使用readprocessmemory和writeprocessmemory通过重写内存来破解游戏。soo off-topic but whatevs –

回答

0

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

我使用的结构是32位体系结构,但我的电脑是64位(python是32位,但没关系)。

这个forum有程序集的答案。这里是包含python中的结构的后续question

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

0

这是有人用同样的问题,在列表视图是另一种方法的例子,因此无法直接读取:

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

+0

谢谢,但我仍在挣扎,链接中的代码丢失了什么我发布了吗?(使用Python从另一个应用程序中提取ListView项目) –

+0

我成功地手动编写了该块并读取它(该块在另一个进程中),所以问题在于SendMessage。 –