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