发明名称 一种带有划词功能的屏幕取词实现方法
摘要 本发明公开了一种带有划词功能的屏幕取词实现方法,包括以下步骤:步骤一:在计算机设备Windows操作系统的dll程序中利用SetWindowsHookEx API函数加载全局鼠标钩子;步骤二:当鼠标悬停的时间超过使用者设定的停留时间,鼠标钩子捕捉到鼠标停留消息WM_MOUSEHOVER后,程序执行以下操作,重画窗口;挂载API钩子,截获API函数;位置匹配;步骤三:当鼠标钩子捕捉到鼠标左键弹起消息WM_LBUTTONUP时,程序执行以下操作,保存剪贴板上的内容;模拟Ctrl+C操作;获得取词内容;恢复剪贴板内容。与现有技术相比,本发明既能方便用户使用,又能保证取词的通用性和准确性。
申请公布号 CN102043623B 申请公布日期 2013.05.29
申请号 CN201010590534.6 申请日期 2010.12.07
申请人 浙江大学 发明人 姚敏;尹建伟;吕方敏;阙杭宁;沈正伟;吴朝晖
分类号 G06F9/44(2006.01)I 主分类号 G06F9/44(2006.01)I
代理机构 杭州裕阳专利事务所(普通合伙) 33221 代理人 江助菊
主权项 一种带有划词功能的屏幕取词实现方法,其特征在于包括以下步骤:步骤一:安装全局鼠标钩子在计算机设备Windows操作系统的dll程序中利用SetWindowsHookEx API函数加载全局鼠标钩子,用于捕捉鼠标的各个消息;当鼠标钩子捕捉到鼠标停留消息WM_MOUSEHOVER时,程序执行屏幕取词操作,其中,所述WM_MOUSEHOVER的停留时间,可以根据使用者的习惯设定;当鼠标钩子捕捉到鼠标左键弹起消息WM_LBUTTONUP时,程序执行划词取词操作;步骤二:屏幕取词当鼠标悬停的时间超过使用者设定的停留时间,安装的鼠标钩子捕捉到鼠标停留消息WM_MOUSEHOVER后,程序执行以下操作,a.重画窗口通过所述鼠标钩子获取鼠标指针在显示器上当前位置的坐标数据,并将此数据保存到计算机设备的内存中,根据坐标数据,在鼠标位置下选取一个1px×1px的微小矩形框,利用API函数InvalidateRect向该矩形框发送重画消息,重画窗口;b.挂载API钩子,截获API函数当计算机设备的Windows系统接收到重画消息时,底层的操作系统会立即调用系统动态链接库GDI32.dll中的ExtTextOutW、ExtTextOutA、TextOutW、TextOutA这些API函数来进行文字输出,此时令程序挂载API钩子,通过API钩子截获进程对上述API函数的调用,取得该API函数的参数,从而实现对输出字符串的捕捉;c.位置匹配在捕捉到输出字符串后,计算出该字符串所在矩形框的边界的坐标值,然后将计算机内存中存储的当前鼠标坐标位置与该矩形框的边界坐标做比较,如果鼠标位置在矩形框内,证明该字符串就是鼠标当前所指向的字符串,直接输出即可;反之不予输出;步骤三:划词取词当鼠标钩子捕捉到鼠标左键弹起消息WM_LBUTTONUP时,程序执行以下操作,a.保存剪贴板上的内容在程序中,应用OpenClipboard函数打开系统剪贴板,再通过GetClipboardData函数获取剪贴板上的文本内容数据,并将其保存到计算机的内存中,定义其变量名为g_oldString,再调用CloseClipboard函数关闭系统剪贴板;b.模拟Ctrl+C操作在保存完剪贴板上的内容后,程序调用keybd_event函数分别模拟“Ctrl”和“C”键被按下,即进行一次复制的操作,鼠标划词的文字内容数据取代剪贴板上原有的内容数据;c.获得取词内容同上述步骤三a,再次应用所述OpenClipboard函数打开剪贴板,利用GetClipboardData函数将其中的文本内容数据保存到计算机的内存中,以便在应用程序中使用;再调用所述CloseClipboard函数关闭系统剪贴板;d.恢复剪贴板内容应用所述OpenClipboard函数打开剪贴板,利用SetClipboardData函数将步骤三a中保存在计算机内存中的g_oldString变量值写到剪贴板中,用于恢复剪贴板上原有的内容;最后调用所述CloseClipboard函数关闭系统剪贴板。
地址 310027 浙江省杭州市西湖区浙大路38号