是否可以获取任何窗口的选定文本,包括非UI自动化元素?

时间:2012-01-28 18:12:15

标签: c# winapi ui-automation microsoft-ui-automation

是否可以获取包含非UI自动化元素的任何窗口的选定文本? 我希望能够获得任何过程当前焦点元素的当前内容的选定文本。

我已经看过使用UI自动化执行此操作的各种示例,但这仅适用于某些似乎最近开发的.NET应用程序。我需要能够获得任何窗口的文本。

我记得有一段时间,一个表现得像字典的应用程序,你可以用鼠标在Windows的任何地方将鼠标悬停在某些文本上,它会显示带有定义的工具提示。这可以用C#和它来实现吗? .NET?

我一直在使用WinSpy检查窗口的内容,这些内容似乎与UIA无关,而ApplicationId显示为空或""。我猜测UIA不支持这个特殊元素。当我使用Notepad ++进行测试时,我也注意到它使用的是Scintilla,它似乎也没有与UIA一起玩。

也许如果有人能用其他方法展示一种可靠的方法,我可以对我的应用程序使用混合方法。使用UIA框架,如果这不会产生结果,那么它将退回到其他方法。

1 个答案:

答案 0 :(得分:1)

实现此目的的一种简单方法是将CTRL + C密钥代码发送到所选窗口,然后您可以在剪贴板中找到所选文本。这很容易实现。有关将密钥发送到其他进程的信息,请参阅here;有关here的信息,请参阅剪贴板。缺点是你显然丢失了剪贴板内容。如果您搜索更稳固的解决方案check this question