“屏幕取词”技术问题?! 请问金山词霸的“屏幕取词”是怎样实现的?!他是用API函数实现的吗?!是的话那又是怎样实现的呢?!请朋友们赐教,谢谢先! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以前有这类问题。记得是HOOK了TextOut系列API 转:“ 屏幕抓字”的实现 1 用SetWindowsHookEx()安装鼠标钩子MouseProc; 2 在屏幕上移动鼠标时,系统就会调用鼠标钩子MouseProc; 3 进入MouseProc,获得鼠标的坐标(x,y), 设置对TextOut()、ExtTextOut()等的跟踪程序, 用invalidateRect()告诉系统该点(x,y)“失效”; 4 系统发出WM_PAINT消息,指示该点(x,y)处的应用程序重绘“失效”的区域。 5 负责绘制该点()的应用程序在受到 WM_PAINT 消息后, 就有机会调用 TextOut()、 ExtTextOut()等函数。 6 调用的函数被拦截进入跟踪程序:设置好了的跟踪程序截获了该次调用, 从 应用程序的堆栈中取出 该点(x,y)“文字”的指针; 7 从应用程序的数据段中将“文字”指针的内容取出,即完成了一次“屏幕 抓 字”; 8 退出跟踪程序,返回到鼠标钩子MouseProc; 9 在MouseProc中解除对TextOut() ExtTextOut()的跟踪; 10 退出MouseProc鼠标钩子程序,控制权交给系统。 11 在屏幕上移动鼠标,开始下一次“屏幕抓字”,返回步骤2。没试过 http://member.netease.com/~inetsoft/downloads/sourcecode/windows/freedic/index.htm 楼主我可以告诉你,,在中国没有几个人能做出像样的取词程序的,,,说的明白些没有几个人能有那样的技术,,,我在家中的机器中有过一位高手和许多delphibbs讨论这项技术的文档,,,我看到过了,,,写的基本思路是对,,但要是真正实现起来是很技术的,,不是那样简单的,,, 金山是这么实现的:IHook.dll - 设置鼠标hook及参数ITextOut.dll - 输出API捕捉函数,包括: xeCreateFont xeDrawText xeDrawTextW xeExtTextOut xeExtTextOutW xeGetACP xeGetTextExtentPoint32 xeGetTextExtentPoint32W xeGetTextSize xeGetTextSizeW xeSetACP xeTextOut xeTextOutW你用些工具监视一下金山词霸就明白了。不过我是用VC,不会delphi。 关于查询 多个字段 是否空值 表示日期的前一天如何表示?? 遇到一个问题 启动画面失败,大家帮我看看 clientdataset的Filter属性,用的时候要注意那些问题啊? 两个form之间怎么传递数据??!!!一个数组类型的 关于给数据库赋值的问题,马上给分 关于日期的问题:帮帮忙兄弟们!!!!!!! 为什么第一次访问数据库的时候总是要求输入用户名密码? 为何给分只能是0--66分? 画图???????? 请推荐查表方式
记得是HOOK了TextOut系列API
2 在屏幕上移动鼠标时,系统就会调用鼠标钩子MouseProc;
3 进入MouseProc,获得鼠标的坐标(x,y),
设置对TextOut()、ExtTextOut()等的跟踪程序,
用invalidateRect()告诉系统该点(x,y)“失效”;
4
系统发出WM_PAINT消息,指示该点(x,y)处的应用程序重绘“失效”的区域。
5 负责绘制该点()的应用程序在受到 WM_PAINT 消息后, 就有机会调用 TextOut()、 ExtTextOut()等函数。
6 调用的函数被拦截进入跟踪程序:设置好了的跟踪程序截获了该次调用,
从 应用程序的堆栈中取出 该点(x,y)“文字”的指针;
7 从应用程序的数据段中将“文字”指针的内容取出,即完成了一次“屏幕
抓 字”;
8 退出跟踪程序,返回到鼠标钩子MouseProc;
9 在MouseProc中解除对TextOut() ExtTextOut()的跟踪;
10 退出MouseProc鼠标钩子程序,控制权交给系统。
11 在屏幕上移动鼠标,开始下一次“屏幕抓字”,返回步骤2。没试过
ITextOut.dll - 输出API捕捉函数,包括:
xeCreateFont
xeDrawText
xeDrawTextW
xeExtTextOut
xeExtTextOutW
xeGetACP
xeGetTextExtentPoint32
xeGetTextExtentPoint32W
xeGetTextSize
xeGetTextSizeW
xeSetACP
xeTextOut
xeTextOutW你用些工具监视一下金山词霸就明白了。不过我是用VC,不会delphi。