应该如何检索当前活动窗口的光标下的单词
How should one retrieve the word under cursor, of current active window?
如何在当前活动窗口的光标下检索单词?我的想法是使用GetCursorPos()
和WindowFromPoint()
来获得句柄,并做一些事情,但如何做呢?
想象一个字典应用程序,它读取光标下的文本,并解释其含义。
编辑
我最终使用了来自标准的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
和EM_GETLINE
消息(使用GetWindowLong(GWL_STYLE)
测试ES_MULTILINE
样式),以检索窗口的文本,然后您将不得不手动解析字符偏移量周围的文本。
对于其他类型的窗口,尤其是自定义控件,如果有可能访问窗口的文本,则必须做更多的工作。一些窗口响应WM_GETTEXT
消息和/或GetWidnowText()
,而其他窗口则不响应。
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 如何按z顺序获取第二个活动窗口?
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 如何在 Ubuntu Qt 中获取活动窗口标题
- 如何在C Winapi中获取活动文件Explorer窗口的路径
- 使用XCB获取活动窗口的宽度
- 如何使用QEvent::WindowBlocked,以便特定窗口始终处于活动状态?
- 如何在窗口上获取活动桌面类型
- 如何使用窗口 API 获取其他应用中的当前活动
- 应该如何检索当前活动窗口的光标下的单词
- 如何在Windows8中获取活动窗口的标题颜色
- 确定窗口是否聚焦/活动/前景
- SDL2窗口是否可以始终处于活动状态,并在DirectX窗口上运行
- 如何在OSX中执行时强制Qt应用程序成为活动/前台窗口
- 如何使用C++更改窗口的活动录制设备?
- 模式对话框处于活动状态时隐藏MFC主窗口
- 以编程方式在窗口中获取活动连接
- 问题:如何在非活动窗口中显示所选文本
- QMainWindow 不再处于活动状态窗口
- 检查窗口是否处于活动状态