📄 csdn_文档中心_电子词典中鼠标取词的原理.htm
字号:
实验很简单,自己写个程序,在OnPaint()里写一句MessageBeep(-1); </FONT><BR><FONT
color=#408080>: 让PC喇叭发声。 </FONT><BR><FONT color=#408080>:
然后运行这个程序和“金山词霸”(“博雅”也一样下面以“词霸”为例), </FONT><BR><FONT
color=#408080>:
当鼠标在自己程序的窗口上停下一会儿(就是取词的等待时间)之后,PC喇叭就会发声, </FONT><BR><FONT
color=#408080>: 同时鼠标也会闪一下。 </FONT><BR><FONT
color=#408080>:
这说明,鼠标停下之后窗口会重画,这必然是“金山词霸”引起的。 </FONT><BR><FONT
color=#408080>:
其目的是好让这个窗口产生API调用,以截取TextOut()、DrawText()等函数。 </FONT><BR><FONT
color=#408080>:
这样“词霸”就可以获取该窗口中输出的字符串了,然后再根据鼠标位置作 </FONT><BR><FONT
color=#408080>: 判断,就可以得到鼠标所指的字符(单词)了。 </FONT><BR><FONT
color=#408080>: 这些只是我的推断,不知是否正确,望高手指正。 </FONT><BR><FONT
color=#408080>:
另外,我还不明白的是该如何截取API调用呢?(这项技术很有用的。) </FONT><BR><FONT
color=#408080>:
GetProcAddress()之后应该用自己的函数取代它,然后再调用原来的吧。 </FONT><BR><FONT
color=#408080>:
可是怎么实现呢?请指点一二。 </FONT><BR> <BR>用钩子函数应该就可以。 <BR>有一个叫socket spy的程序就是,做一个API的过滤器。 <BR>-- <BR> 那天是你用一块红布 <BR> 蒙住我双眼也蒙住了天 <BR> 你问我看见了什么 <BR> 我说我看见了幸福 <BR> ... <BR> <BR></FONT><FONT
color=#ff00ff>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: public.bjnet.ed] <BR>发信人: xiaobo (激情蕴于心中), 信区: Programming <BR>标 题: Re: 屏幕取词的方法 <BR>发信站: BBS 水木清华站 (Thu Nov 27 12:03:52 1997) <BR> <BR>【 在 Hmmm (头大如斗然而非常高兴的Hmmm) 的大作中提到: 】 <BR><FONT
color=#408080>: 用钩子函数应该就可以。 </FONT><BR><FONT
color=#408080>:
有一个叫socket spy的程序就是,做一个API的过滤器。 </FONT><BR>钩子只能过滤消息吧,如何过滤API? <BR>愿闻其详。 <BR> <BR>-- <BR> 江声浩荡,自屋后上升......</FONT> <BR> --《约翰.克利斯朵夫》 <BR> <BR><FONT
color=#00ff00>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.26.20] <BR>发信人: ming (忙一阵子静一阵子), 信区: Programming <BR>标 题: Re: 屏幕取词的方法 <BR>发信站: BBS 水木清华站 (Thu Nov 27 13:48:35 1997) <BR> <BR>【 在 youxu (糖猪) 的大作中提到: 】 <BR><FONT
color=#408080>:
建议你去 曙光站 编程版看看,有一篇关于修改代码的文章. </FONT><BR> <BR>我以前在网上取下来过两段代码,可能也是在曙光站看的, 记不清了。 <BR>是在win3.1/95以及NT下屏幕截取的例子。 <BR> <BR><A
href="ftp://166.111.79.141/Internet/Program/guihook.zip">ftp://166.111.79.141/Internet/Program/guihook.zip</A> & guihooknt.zip <BR> <BR>-- <BR> 圣人忘情 <BR> 最下不及情 <BR> 情之所钟 <BR> 正在我辈 <BR> <BR></FONT><FONT
color=#0000ff>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.79.141] <BR>发信人: poncaly (庞卡莱VS机器猫), 信区: Programming <BR>标 题: Re: 屏幕取词的方法 <BR>发信站: BBS 水木清华站 (Fri Nov 28 14:15:08 1997) <BR> <BR>【 在 xiaobo (激情蕴于心中) 的大作中提到: 】 <BR><FONT
color=#408080>: 钩子只能过滤消息吧,如何过滤API? </FONT><BR><FONT
color=#408080>:
愿闻其详。 </FONT><BR> <BR> 过滤API函数有三种方法。 <BR> 1 做一个DLLLL,在内部实现与被调用APAPI同名的函数,再把这个DDDLL放到系统DDDLL?nbsp;<BR> 前面 <BR> 2 修改AAAPI函数代码,设置断点或用JJJMMMPPP,CCCALLL指令。 <BR> 3 在其他的进程中注入DDDLLLLL,有四种方法 <BR> 1 设置钩子函数 <BR> 2在注册表中进行注册 <BR> 在 中用CCCC函数,不过不适合9595 <BR> 强行注入D, <BR> <BR>-- <BR></FONT><FONT
color=black>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.5.122] <BR>发信人: Dreammy (这个杀手不太冷), 信区: Programming <BR>标 题: Re: 屏幕取词的方法 <BR>发信站: BBS 水木清华站 (Sat Nov 29 13:47:29 1997) <BR> <BR>【 在 xyj (rocky) 的大作中提到: 】 <BR><FONT
color=#408080>:
可以看Matt Pietrek写的<Windows 95 System Programming SECRETS> </FONT><BR><FONT
color=#408080>:
有中译本<Windows 95系统编程奥秘> </FONT><BR><FONT
color=#408080>: 需要了解PE文件格式和系统可执行文件的加载方式! </FONT><BR><FONT
color=#408080>:
偶认为象博雅这样的取词是通过截获系统DLL(可能是GDI)中的TextOut或其 </FONT><BR><FONT
color=#408080>:
相关函数来实现的.系统DLL内存地址>0X8000000(2G~4G),为所有 </FONT><BR><FONT
color=#408080>:
应用程序共享,地址空间固定,不象0~2G间的内存地址随不同的应用 </FONT><BR><FONT
color=#408080>:
程序而切换. </FONT><BR>这倒没有太大必要,因为博雅或其他字典都是16位的,做起来简单多了 <BR>它们是NE(New Executable) , 离Portable .... 还有点距离 <BR>弟做过一个通用的API钩子模块, 主要的问题没出在这,倒是处理重入(Reentry) <BR>的问题费了好大力气,还有,它们兼容性不好(如博雅,和CStar),这在我前面的 <BR>一片RE里讨论过 <BR> <BR> <BR>-- <BR></FONT><FONT
color=#0080ff>※ 修改:·Dreammy 於 Nov 29 14:06:36 修改本文·[FROM: 166.111.91.63] <BR></FONT><FONT
color=#800000>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.91.63] <BR>发信人: xyj (rocky), 信区: Programming <BR>标 题: Re: 屏幕取词的方法 <BR>发信站: BBS 水木清华站 (Mon Dec 1 10:13:39 1997) <BR> <BR><FONT
color=#408080>:
: 偶认为象博雅这样的取词是通过截获系统DLL(可能是GDI)中的TextOut或其 </FONT><BR><FONT
color=#408080>:
: 相关函数来实现的.系统DLL内存地址>0X8000000(2G~4G),为所有 </FONT><BR><FONT
color=#408080>:
: 应用程序共享,地址空间固定,不象0~2G间的内存地址随不同的应用 </FONT><BR><FONT
color=#408080>: : 程序而切换. </FONT><BR><FONT
color=#408080>:
这倒没有太大必要,因为博雅或其他字典都是16位的,做起来简单多了 </FONT><BR><FONT
color=#408080>:
它们是NE(New Executable) , 离Portable .... 还有点距离 </FONT><BR><FONT
color=#408080>:
弟做过一个通用的API钩子模块, 主要的问题没出在这,倒是处理重入(Reentry) </FONT><BR><FONT
color=#408080>:
的问题费了好大力气,还有,它们兼容性不好(如博雅,和CStar),这在我前面的 </FONT><BR><FONT
color=#408080>: 一片RE里讨论过 </FONT><BR><FONT color=#408080>:
</FONT><BR>Sorry,前一篇没有说清楚! <BR>Win95下的GDI的核心代码是16位的,GDI32只是GDI16的一个外壳, <BR>所有象跛鸭之类的16位字典可以运行. <BR>由于GDI32处理了重入问题,因此在HOOK了GDI16的函数时,运行32位程序 <BR>应该没有重入问题,但16位的恐怕就有些问题! <BR> <BR></P></FONT><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_电子词典中鼠标取词的原理.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你没有登陆,无法发表评论。 请先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=1523">登陆</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文档中心_电子词典中鼠标取词的原理.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -