【问题标题】:Get the text from any type of document从任何类型的文档中获取文本
【发布时间】:2011-05-30 06:51:35
【问题描述】:

有没有办法(Win32API 或其他)从任何类型的窗口中获取文本?我可以获得活动窗口的HWND,但调用发送WM_GETTEXT 消息并不总是给我文本(MS Word 就是一个很好的例子)。
我正在尝试制作一个通用拼写检查器,用户可以在任何应用程序中按下热键组合并更正他的文本。
如果我想要整个文本,只是选择文本,或者说出光标所在的单词,会有什么不同吗?
我可以使用库或 Win32API 或其他任何东西接受 c、c++ 或 c# 中的答案。如果有解决方案,但只能使用其他一些编程语言(不可能只能在 Delphi 中完成,而不能使用 API 的 c,但无论如何),我可能也可以做到。

【问题讨论】:

    标签: c# c++ c windows winapi


    【解决方案1】:

    我建议你看看 UI Automation API,这是你能找到的最好的,因为它是为这种用途而设计的,忘记原始的低级 ole' Windows API :-)

    我引用简介:

    UI 自动化提供程序化 访问大多数用户界面 (UI) 桌面上的元素,启用 辅助技术产品,例如 屏幕阅读器提供信息 关于 UI 给最终用户和 通过其他方式操作 UI 标准输入。 UI自动化也 允许自动化测试脚本 与 UI 交互。

    一个好的开始是尝试UISpy tool。这将有助于检查您在编写任何代码之前能够以编程方式找到的信息类型,这至少可以确保您不会浪费时间。

    不是那么容易找到,这里有一个链接:http://andrewtokeley.net/archive/2009/09/15/uispy-ndash-download-it-here.aspx

    【讨论】:

    • 谢谢,但在尝试使用 UISpy 后我无法获取文本,所以我认为它对我没有帮助。
    【解决方案2】:

    如果不引用特定于应用程序的 API,您将无法做到这一点。不同的应用程序以不同的方式处理文本。

    例如,在记事本中,文本只是 Windows API 可以检索的多行文本框中的字符串。

    然而,Word 在内部处理文本并将显示呈现为图像。 Windows API 所知道的只是 Word 呈现的位图。 Windows API 无法获取构成文本的 ASCII/Unicode 字符。为此,您需要使用 Word 的 API。许多其他应用程序也会出现同样的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-13
      • 2011-07-27
      • 2021-05-10
      • 2013-05-08
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      相关资源
      最近更新 更多