C# 给定(纯win32)列表视图的HWND,如何获取其项?

C# 给定(纯win32)列表视图的HWND,如何获取其项?,c#,winapi,automation,C#,Winapi,Automation,我想检查另一个应用程序中的多列列表视图的内容。我希望它的行和列可以单独访问。我有控制权。所讨论的listview是commctl32.dll提供的。到目前为止,我一直在看这篇文章,但我有点困惑,这看起来像WinAPI中更“神秘”的部分。如果您有任何帮助,我们将不胜感激。您链接到的文章介绍了控件处于进程中时的列表视图处理。对于不同流程中的列表视图来说,事情很复杂。在这种情况下,您需要的消息包括指向结构的指针,例如指向LVITEMstructs的指针。系统不会跨进程边界封送这些指针。因此,为了实现这

我想检查另一个应用程序中的多列列表视图的内容。我希望它的行和列可以单独访问。我有控制权。所讨论的listview是commctl32.dll提供的。到目前为止,我一直在看这篇文章,但我有点困惑,这看起来像WinAPI中更“神秘”的部分。如果您有任何帮助,我们将不胜感激。

您链接到的文章介绍了控件处于进程中时的列表视图处理。对于不同流程中的列表视图来说,事情很复杂。在这种情况下,您需要的消息包括指向结构的指针,例如指向
LVITEM
structs的指针。系统不会跨进程边界封送这些指针。因此,为了实现这一点,您需要在另一个进程的虚拟地址空间中分配内存。这包括调用
OpenProcess
VirtualAllocEx
WriteProcessMemory
ReadProcessMemory
。没什么意思。网络上有很多这样的例子,我不想在这里再添加一个


然而,这是解决问题的错误方法。您应该使用其中一个自动化接口来自动化另一个应用程序。从查看开始。

使用自动化完成此操作。控件存在于另一个进程中,因此链接到的代码没有任何用处。您只能通过ReadProcessMemory/WriteProcessMemory黑客攻击来实现这一点。没有乐趣,当然,自动化是为了以干净的方式解决问题而设计的。从自动化开始。@DavidHeffernan你确定吗?WinAPI似乎对从另一个进程返回内容没有太多限制。例如,无论使用哪个句柄,GetWindowText都可以工作。Win32不会封送列表视图消息的文本。这是你在网上的搜索,点击量约为数百万。你为什么拒绝自动化?你甚至给自动化问题加了标签。@DavidHeffernan我不是在拒绝自动化……哦,很好。那就是答案了。你能在一个可能的基于UIAutomation的解决方案上扩展一下吗?我可以获得AutomationElement,但找不到如何从中读取列表元素的示例。