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

Posted

技术标签:

【中文标题】是否可以获得任何窗口的选定文本,包括非 UI 自动化元素?【英文标题】:Is it possible to get the selected text of any window including non-UI automation elements? 【发布时间】:2012-02-21 06:52:53 【问题描述】:

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

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

我记得不久前,一个表现得像字典的应用程序,您可以在 Windows 中的任何位置用鼠标悬停在某些文本上,它会显示带有定义的工具提示。这可以在 C# 和 .NET 中实现吗?

我一直在使用 WinSpy 检查似乎不适用于 UIA 的窗口内容,ApplicationId 显示为空或“”。我猜 UIA 不支持这个特定的元素。当我使用 Notepad++ 进行测试时,我还注意到它使用了 Scintilla,这似乎也无法与 UIA 一起使用。

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

【问题讨论】:

没有100%可靠的方法。 从另一个程序中提取信息需要其他程序的合作。 (想一想:另一个程序如何从你的程序中提取信息?)公开文本内容的标准方法是通过 MSAA 或 UI 自动化。 使用 Win32Api 或 windows 挂钩怎么样?反正这个可以用吗? 【参考方案1】:

实现此目的的一种简单方法是将CTRL + C 密钥代码发送到选定的窗口,然后您可以在剪贴板中找到选定的文本。这很容易实现。请参阅here 将密钥发送到其他进程,并参阅here 以读取剪贴板。缺点是您显然会丢失剪贴板内容。如果您寻找更可靠的解决方案check this question。

【讨论】:

更严重的问题:如果程序使用 Ctrl+C 来执行 Copy 以外的操作,那么您就有麻烦了。例如。将 Ctrl+C 发送到控制台程序通常会终止它。

以上是关于是否可以获得任何窗口的选定文本,包括非 UI 自动化元素?的主要内容,如果未能解决你的问题,请参考以下文章

Material ui 使用基于选定主题模式的调色板原色

是否有任何解决方案可以显示从弹出窗口到选择字段的选定记录

Jquery-ui自动完成选定的值

Jquery Mobile - 单击弹出窗口(标题和内容的任何区域)自动聚焦文本字段

如何获取选定的行,包括 JTree 的子行

是否可以在选定的谷歌地图路线中获得完整的国家列表?