【问题标题】:Get the content of any active window获取任何活动窗口的内容
【发布时间】:2015-04-22 12:03:34
【问题描述】:

我正在努力寻找一种可靠的方法来获取当前处于前台的窗口的内容/文本。如果可能的话,它应该能够从用户当前正在使用的每个可能的程序中确定文本

我尝试了什么:

  • 拍摄当前活动窗口的屏幕截图,应用一些过滤器并运行 OCR 算法(tesseract .Net 包装器)。这可行,但需要很长时间并且不是很准确。
  • 然后我尝试了一些 Windows API 函数(FindWindow 和 SendMessage),如 here 所述。例如,我可以让它为标准编辑器(记事本)运行,但不适用于大多数其他程序
  • 我还尝试使它与 AutoHotKeyWinGetText 函数以及 .Net Wrapper 一起工作。在这里,我只是得到一些关于窗口的信息,但绝不是它的文本......

不幸的是,现在,我不知道该怎么做,因为我陷入了各种困境……有人有这方面的经验或知道一种可行的方法吗?任何建议都非常感谢

【问题讨论】:

  • 没有通用的方法可以做到这一点。如果程序支持可访问性,那么您可能可以使用可访问性 API 来提取文本。如果文本是控件的标题(例如 STATIC),则可以使用 GetWindowText。如果只是通过 TextOut 或类似方式呈现的纯文本,那么 OCR 是您唯一的选择。
  • UIAutomation 是标准方式。不过,并非所有应用都以这种方式暴露自己。
  • @JonathanPotter:感谢您的评论!是的,文本通常可能不是控件的内容,只是来自 IDE、浏览器窗口、Word、Outlook 等。你可能知道是否有可能以某种方式挂钩到文本渲染(即实际窗口在哪里创建)?
  • @DavidHeffernan:谢谢!你可能有一个开始的链接吗? (是不是像这样msdn.microsoft.com/en-us/library/ms788751(v=vs.110).aspx)谢谢!
  • @casaout 是的,应该可以; here aremore resources

标签: c# wpf winapi


【解决方案1】:

很难找到从应用程序中检索文本的单一解决方案。不同的程序需要不同的方法。

对于 AutoHotkey,使用 Acc.ahk 的 AccViewer 是首选的最佳方法。 Acc 适用于各种控件以及控件中的元素,它可以覆盖比 AutoHotkey 的 ControlGet 命令更多的控件类型。

Acc 库 [AHK_L](2012 年 9 月 27 日更新) - 脚本和函数 - AutoHotkey 社区
https://autohotkey.com/board/topic/77303-acc-library-ahk-l-updated-09272012/

Accessible Info Viewer - Alpha Release (2012-09-20) - 脚本和函数 - AutoHotkey 社区
https://autohotkey.com/board/topic/77888-accessible-info-viewer-alpha-release-2012-09-20/

描述一些进一步的文本检索方法的链接:

AutoHotKey ControlGet

另请注意:

COM(组件对象模型),由 AutoHotkey 本地处理。它可用于从 Internet Explorer 中的 Web 元素中检索文本,通过 VBA 代码,可以从 MS Excel 和 MS Word 等 MS Office 程序中检索文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 2020-09-11
    • 2013-02-06
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多