最近发现金山词霸屏幕取词功能导致连连看在et内执行的时候堆栈溢出
而连连看单机版则无此问题.郁闷异常,分析金山词霸的取词功能如下: 【程序编程相关:模板类的练习——栈 】 【推荐阅读:模板和异常的问题】 【扩展信息:模板类的练习——队列】 1 屏幕抓词屏幕抓词(或者叫动态翻译)是指随着鼠标的移动,软件能够随时获知屏幕上鼠标位置的单词或汉字,并翻译出来提示用户.它对於上网浏览.在线阅读外文文章等很有帮助作用,因此许多词典软件都提供了屏幕抓词功能.
屏幕抓词的关键是如何获得鼠标位置的字符串,windows的动态链接与消息响应机制为之提供了实现途径. 概括地说,主要通过下面的几个步骤来取得屏幕上鼠标位置的字符串: . 代码拦截:windows以dll方式提供系统服务,可以方便地获取windows字符输出api的地址,修改其入口代码,拦截应用程序对它们的调用.. 鼠标hook:安装wh—mouseproc类型的全局鼠标hook过程,监视鼠标在整个屏幕上的移动.
. 屏幕刷新:使鼠标周围一块区域无效,并强制鼠标位置的窗口刷新屏幕输出.窗口过程响应wm—ncpaint与wm—paint消息,调用exttextout/textout等字符输出api更新无效区域里面的字符串.这些调用被我们截获,从堆栈里取得窗口过程传给字符api的参数,如字符串地址.长度.输出坐标.hdc.裁剪区等信息. 2 取词的过程, 0 判断鼠标是否在一个地方停留了一段时间 1 取得鼠标当前位置 2 以鼠标位置为中心生成一个矩形 3 挂上api钩子 4 让这个矩形产生重画消息 5 在钩子里等输出字符 ... 下一页