我正在处理一个必须从其他应用程序(非托管)捕获数据的C#应用程序。
这另一个应用程序有很多SysListView32控件,我必须获取特定SysListView32控件的数据,但我唯一能用来获得这个特定控件的是列的标题(SysHeader32) )文本,它们对于每个SysListView32控件都是不同的。
我从所有SysListView32控件中捕获了数据(来自行和列的所有文本),但是我无法捕获标题列的文本。
任何人都可以帮助我?
谢谢,抱歉我的英语不好。
答案 0 :(得分:1)
您需要向控件发送LVM_GETCOLUMN
消息。困难在于消息填充了作为指向结构的指针传递的结构的内容。但是该指针必须引用在拥有列表视图的进程中分配的内存。在您的方案中,列表视图由不同的进程拥有。
您可以使用VirtualAlloc
在其他进程中分配内存来解决此问题。然后,您可以使用WriteProcessMemory
初始化该内存。然后使用ReadProcessMemory
在阅读内容之前发送消息。最后,使用VirtualFree
解除分配。
这是一个很难做到的事情,如果目标流程的位数不同,那就更复杂了。
看过你对这个问题的评论后,很明显你已经熟悉了这个技术。
在我看来,您最好使用自动化API,我相信它会更容易地为您提供信息。