0

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

我在这里使用了代码:使用 Python 从另一个应用程序中提取 ListView 项目,它返回了一个包含空字符串的列表。我试图检查返回码和其他值,它们都是有意义的。

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

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

为了获得桌面窗口的句柄,我使用了get_desktop()我在此处的解决方案部分中发布的函数:如何在 python 中获取桌面项目计数?

有任何想法吗?谢谢!

4

2 回答 2

1

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

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

这个论坛有汇编答案。这是一个后续问题,其中包含 python 中的结构。

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

于 2015-01-03T01:00:27.213 回答
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

于 2014-12-28T05:20:07.200 回答