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