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

时间:2012-02-20 20:59:04

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

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

  1. 获取顶部和激活的窗口或从鼠标位置。
  2. 从鼠标位置获取其孩子。
  3. 获取所选文字或进行设置。
  4. 在ms中我使用spy ++来检测包含文本的控件我得到“Microsoft Word Document” enter image description here

1 个答案:

答案 0 :(得分:4)

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

  • 对于EDIT和RichEdit控件,各种EM_ messages工作。

  • 对于Internet Explorer,可以使用HTML DOM

  • 对于Word,Text Object Model接口可用于访问文本和格式。其他应用可能支持类似应用的特定型号。

  • 某些(但不是全部)应用和应用框架支持辅助功能API,例如UIAutomationIAccessible2,它允许访问有关应用中控件的信息,以及有关文本的信息和文字选择。

  • 对于不支持上述任何内容的应用,屏幕阅读器通常使用称为Off-screen model的技术,这是一种涉及拦截所有图形输出调用以及维护内存数据库的复杂技术绘制了什么,所以他们可以查看应该在屏幕上任何一点的文本。

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