windows下的屏幕划词

屏幕划词,顾名思义即选中一段文字即可获取选中文字的内容,屏幕划词功能在词典类软件中应用较多。一般词典类软件还会有屏幕取词功能,取词即鼠标悬停在文字上即可获取当前鼠标位置的文字。个人认为,取词功能相对于划词功能更难实现,划词可以通过模拟ctl+c组合键来获取文字,而取词功能就需要去强制重绘鼠标区域的界面,然后hook相应的文字输出的API来达到目的。本文主要介绍通过clt+c组合键来进行屏幕划词。

首先,我们需要确定何时模拟clt+c组合键,所有我们需要知道当前鼠标有没有选中一段文字。大概过程:使用SetWindowsHookEx来设置一个全局鼠标钩子,利用WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE和WM_LBUTTONDBLCLK 4个消息来确定鼠标是否选中一段文字。发生下面2种情况我们都认为选中了一段文字,第一种情况:WM_LBUTTONDOWN和WM_LBUTTONUP之间的时间间隔超过了我们设置的时间,并且在此时间间隔中,有WM_MOUSEMOVE消息,那么我们就认为用户选中了一段文字;第二种情况:触发了WM_LBUTTONDBLCLK(鼠标双击消息)。  PS:在非客户区按键抬起也会收到WM_LBUTTONUP消息,按照MSDN的解释是不应该触发该消息的,但是在实测过程中,在非客户区会触发WM_LBUTTONUP消息,但是在非客户区,是不会触发WM_LBUTTONDOWN,这一点不知道为什么。


确定了如何模拟clt+c组合键之后,就开始取词了。上面判断是否选中的过程都是在dll中完成的,当dll中判断需要取词后,通知外部程序进行模拟按键取词,在模拟按键之前,最好sleep一点时间,主要是上面的第二种情况,即需要取词的对象需要处理完WM_LBUTTONDBLCLK消息之后才算选中状态,如果外部程序立即模拟按键可能会取到空值。模拟按键结束后最好也sleep一点时间,原因和上面也差不多。

windows下的屏幕划词_第1张图片

你可能感兴趣的:(屏幕划词)