【问题标题】:Read listview data from another process从另一个进程读取列表视图数据
【发布时间】:2012-11-11 08:57:44
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 不,还没有,还在挣扎。
  • 我也面临同样的问题。你解决了吗?
  • @ABBolim:不,还没有,似乎没有可行的解决方案

标签: windows api inter-process-communicat syslistview32


【解决方案1】:

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

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

【讨论】:

  • 我几乎明白了。有没有可能挂钩 DrawText 来捕获文本?我已经在远程进程中注入了代码来获取文本,因此尽管我对 API 挂钩不太熟悉,但添加更多代码不会有问题。有希望吗?
猜你喜欢
  • 2013-12-16
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
相关资源
最近更新 更多