从SysHeader32获取列的标题文本

时间:2013-07-26 14:48:52

标签: c# pinvoke unmanaged syslistview32

我正在处理一个必须从其他应用程序(非托管)捕获数据的C#应用​​程序。

这另一个应用程序有很多SysListView32控件,我必须获取特定SysListView32控件的数据,但我唯一能用来获得这个特定控件的是列的标题(SysHeader32) )文本,它们对于每个SysListView32控件都是不同的。

我从所有SysListView32控件中捕获了数据(来自行和列的所有文本),但是我无法捕获标题列的文本。

任何人都可以帮助我?

谢谢,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

您需要向控件发送LVM_GETCOLUMN消息。困难在于消息填充了作为指向结构的指针传递的结构的内容。但是该指针必须引用在拥有列表视图的进程中分配的内存。在您的方案中,列表视图由不同的进程拥有。

您可以使用VirtualAlloc在其他进程中分配内存来解决此问题。然后,您可以使用WriteProcessMemory初始化该内存。然后使用ReadProcessMemory在阅读内容之前发送消息。最后,使用VirtualFree解除分配。

这是一个很难做到的事情,如果目标流程的位数不同,那就更复杂了。

看过你对这个问题的评论后,很明显你已经熟悉了这个技术。

在我看来,您最好使用自动化API,我相信它会更容易地为您提供信息。