c++ win32文本选择检测和在另一个应用程序中获取和修改

标签 c++ winapi accessibility jaws-screen-reader

我见过一个用于帮助盲人的应用程序,它被称为 JAWS(它充当屏幕阅读器)它检测字符串并在许多应用程序中读取它,例如 MS Office 应用程序、记事本、Internet Explorer .....等。是否可以在另一个应用程序中检测文本选择?怎么样?我认为使用了可访问性,但我不知道如何使用它!我可以用热键替换选择检测。
_ 我试图找到如下解决方案

  • 获取顶部和激活的窗口或从鼠标位置。
  • 从鼠标位置获取它的 child 。
  • 获取选定的文本或设置它。

  • 在 ms word 中,我使用 spy++ 来检测包含我得到“Microsoft Word 文档”文本的控件
    enter image description here

    最佳答案

    没有简单的方法可以做到这一点,因为没有单一一致的方法可以从任意应用程序中获取文本(选择或其他方式)。 JAWS 等应用程序通常使用一整套技术,具体取决于应用程序或控件:

  • 对于 EDIT 和 RichEdit 控件,各种 EM_ messages工作。
  • 对于 Internet Explorer,HTML DOM可以使用。
  • 对于 Word,Text Object Model接口(interface)可用于访问文本和格式。其他应用程序可能支持类似的应用程序特定模型。
  • 一些(但不是全部)应用程序和应用程序框架支持辅助功能 API,例如 UIAutomationIAccessible2 ,它允许访问有关应用程序中控件的信息,以及有关文本和文本选择的信息。
  • 对于不支持上述任何一项的应用程序,屏幕阅读器通常使用一种称为 Off-screen model 的技术。 ,一种复杂的技术,涉及拦截所有图形输出调用,并维护一个内存数据库,其中包含在哪里绘制的内容,因此他们可以查找应该在屏幕上任何位置的文本。

  • 由于这些都没有单独涵盖所有内容,因此屏幕阅读器通常会根据当前应用程序尝试所有这些:您几乎可以将屏幕阅读器视为特殊情况代码库,用于从各种应用程序中提取信息。

    关于c++ win32文本选择检测和在另一个应用程序中获取和修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368326/

    相关文章:

    c++ - Qt 字符串终止

    C++文件同步问题

    c# - 免注册 COM 和 DLL 位置

    accessibility - 促销折扣横幅的咏叹调角色

    c++ - 使用 for loop int 声明打开多个文件

    c++ - 扩展类时的性能,组合与多态性

    c++ - MFC CWinApp 程序中的输入框?

    windows - Win10深色主题-如何在WINAPI中使用?

    swift - VoiceOver 不会宣布 NSAccessibility 通知

    accessibility - (自定义)WAI-ARIA 角色