如何在当前活动窗口中检索光标下的单词?我的想法是使用GetCursorPos()
并WindowFromPoint()
获得句柄,并做一些事情,但是如何?
想象一个字典应用程序,它读取光标下的文本,并解释其含义。
编辑
我最终使用了来自 stardict 的 dll,它的 API 钩子在文本绘图上。
您必须知道为此所需的 API;这并不明显。您正在寻找 MSAA,Microsoft Active Accessibility
简而言之,您将编写一个 MSAA 客户端。通过调用AccessibleObjectFromPoint
你得到一个IAccessible
指针。该指针可以访问指定点处对象的属性。
您所要求的实施起来并非易事。
一旦您确定了光标下的窗口(不要忘记您还需要使用ChildWindowFromPoint()
向下钻取嵌套窗口),您可以使用GetClassName()
它来确定它是什么类型的窗口。
对于标准RICHEDIT
窗口,您可以将屏幕绝对光标坐标转换为窗口内的客户端相对坐标MapWindowPoints()
,然后使用EM_FINDWORDBREAK
、EM_EXSETSEL
和EM_GETSELTEXT
消息在光标坐标处定位、突出显示和复制单词。
对于标准EDIT
窗口,一旦你翻译了坐标,你可以使用EM_CHARFROMPOS
消息来定位最接近光标坐标的字符偏移,然后EM_GETTEXT
对单行窗口使用消息,或者对多行窗口使用EM_LINEFROMCHAR
and消息(使用测试样式),检索窗口的文本,然后您必须手动解析字符偏移周围的文本。EM_GETLINE
GetWindowLong(GWL_STYLE)
ES_MULTILINE
对于其他类型的窗口,尤其是自定义控件,您必须做更多的工作,如果甚至可以访问窗口的文本。一些窗口响应WM_GETTEXT
消息和/或GetWidnowText()
,而其他窗口不响应。