从另一个进程读取listview数据

时间:2012-11-11 08:57:45

标签: windows api inter-process-communicat syslistview32

这是一种GUI自动化应用程序,我希望从另一个进程读取listview中的数据。

listview类是SysListView32并且具有以下样式集LVS_OWNERDRAWFIXED

通常我可以使用以下程序从listview中读取文本

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

当listview不是ownerdrawn时,它工作正常,但在这种情况下,listview似乎是由所有者绘制的,即listitem没有数据。

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

1 个答案:

答案 0 :(得分:3)

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

无法找出数据的存储位置。你可以伪造自己的WM_DRAWITEM消息,虽然它是非常很难做,因为你必须注入代码来创建HDC,但这只能获得像素,而不是字节。使用OCR将是一个主要的异常解决方案。实际上,你需要在这个上放弃。