从任何类型的文档中获取文本

时间:2011-05-30 06:51:35

标签: c# c++ c windows winapi

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

2 个答案:

答案 0 :(得分:4)

我建议您查看用户界面Automation API,这是您将找到的最佳内容,因为它是专为此类用途而设计的,并且忘记了原始的低级别'Windows API :-)

我引用了这个简介:

  

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

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

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

答案 1 :(得分:1)

如果不引用特定于应用程序的API,您将无法执行此操作。不同的应用程序处理文本

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

然而,

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