应该如何检索当前活动窗口的光标下的单词

How should one retrieve the word under cursor, of current active window?

本文关键字:窗口 活动 光标 单词 何检索 检索      更新时间:2023-10-16

如何在当前活动窗口的光标下检索单词?我的想法是使用GetCursorPos()WindowFromPoint()来获得句柄,并做一些事情,但如何做呢?

想象一个字典应用程序,它读取光标下的文本,并解释其含义。

编辑

我最终使用了来自标准的dll,它的API挂钩在文本绘制上。

您必须知道为此所需的API;这并不明显。您正在寻找MSAA,Microsoft Active Accessibility

简而言之,您将编写一个MSAA客户端。通过调用AccessibleObjectFromPoint,可以得到一个IAccessible指针。此指针允许访问指定点处对象的属性。

您所要求的实现起来并不简单。

一旦您确定了光标下的窗口(别忘了,您还需要使用ChildWindowFromPoint()来深入查看嵌套窗口),就可以使用GetClassName()来确定它是什么类型的窗口。

对于标准的RICHEDIT窗口,可以使用MapWindowPoints()将屏幕绝对光标坐标转换为窗口内的客户端相对坐标,然后使用EM_FINDWORDBREAKEM_EXSETSELEM_GETSELTEXT消息在光标坐标处定位、高亮显示和复制单词。

对于标准的EDIT窗口,一旦转换了坐标,就可以使用EM_CHARFROMPOS消息来定位最接近光标坐标的字符偏移,然后对单行窗口使用EM_GETTEXT消息,或对多行窗口使用EM_LINEFROMCHAREM_GETLINE消息(使用GetWindowLong(GWL_STYLE)测试ES_MULTILINE样式),以检索窗口的文本,然后您将不得不手动解析字符偏移量周围的文本。

对于其他类型的窗口,尤其是自定义控件,如果有可能访问窗口的文本,则必须做更多的工作。一些窗口响应WM_GETTEXT消息和/或GetWidnowText(),而其他窗口则不响应。