2

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

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

编辑

我最终使用了来自 stardict 的 dll,它的 API 钩子在文本绘图上。

4

2 回答 2

5

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

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

于 2012-09-21T07:52:53.337 回答
2

您所要求的实施起来并非易事。

一旦您确定了光标下的窗口(不要忘记您还需要使用ChildWindowFromPoint()向下钻取嵌套窗口),您可以使用GetClassName()它来确定它是什么类型的窗口。

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

对于标准EDIT窗口,一旦你翻译了坐标,你可以使用EM_CHARFROMPOS消息来定位最接近光标坐标的字符偏移,然后EM_GETTEXT对单行窗口使用消息,或者对多行窗口使用EM_LINEFROMCHARand消息(使用测试样式),检索窗口的文本,然后您必须手动解析字符偏移周围的文本。EM_GETLINEGetWindowLong(GWL_STYLE)ES_MULTILINE

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

于 2012-09-21T02:44:44.537 回答