2

这是一种 GUI 自动化应用程序,我想从另一个进程的列表视图中读取数据。

列表视图类是 SysListView32 并具有以下样式集 LVS_OWNERDRAWFIXED

通常,我可以使用以下过程从列表视图中读取文本

  • 在其他进程的内存空间中分配内存
  • 向 listview 发送消息以使用该进程中分配的缓冲区指针读取文本
  • 读取缓冲区

当列表视图不是所有者绘制时它工作正常,但在这种情况下,列表视图似乎是由所有者绘制的,即列表项没有数据。

是否可以通过我讨论过的方法或任何方法或通过挂钩 api 或任何方法从这样的列表视图中读取文本?

4

1 回答 1

3

控件仍必须将 LVITEM 添加到列表视图中。但是,当然没有义务在其中放入任何有用的东西。如果应用程序自己绘制,指定一个空的 pszText 或 iImage 就可以了。它将实现 WM_DRAWITEM 消息处理程序并使用内部数据来呈现项目。

无法找出该数据的存储位置。您可以伪造自己的 WM_DRAWITEM 消息,尽管这很难做到,因为您必须注入代码来创建 HDC,但这只会得到像素,而不是字节。使用 OCR 将是一个主要的异常值解决方案。实际上,您需要在这个问题上认输。

于 2012-11-25T19:12:06.723 回答