⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_电子词典中鼠标取词的原理.htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 3 页
字号:
            &nbsp;实验很简单,自己写个程序,在OnPaint()里写一句MessageBeep(-1);&nbsp;</FONT><BR><FONT 
            color=#408080>: &nbsp;让PC喇叭发声。&nbsp;</FONT><BR><FONT color=#408080>: 
            &nbsp;然后运行这个程序和“金山词霸”(“博雅”也一样下面以“词霸”为例),&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;当鼠标在自己程序的窗口上停下一会儿(就是取词的等待时间)之后,PC喇叭就会发声,&nbsp;</FONT><BR><FONT 
            color=#408080>: &nbsp;同时鼠标也会闪一下。&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;这说明,鼠标停下之后窗口会重画,这必然是“金山词霸”引起的。&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;其目的是好让这个窗口产生API调用,以截取TextOut()、DrawText()等函数。&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;这样“词霸”就可以获取该窗口中输出的字符串了,然后再根据鼠标位置作&nbsp;</FONT><BR><FONT 
            color=#408080>: &nbsp;判断,就可以得到鼠标所指的字符(单词)了。&nbsp;</FONT><BR><FONT 
            color=#408080>: &nbsp;这些只是我的推断,不知是否正确,望高手指正。&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;另外,我还不明白的是该如何截取API调用呢?(这项技术很有用的。)&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;GetProcAddress()之后应该用自己的函数取代它,然后再调用原来的吧。&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;可是怎么实现呢?请指点一二。&nbsp;</FONT><BR>&nbsp;<BR>用钩子函数应该就可以。&nbsp;<BR>有一个叫socket&nbsp;spy的程序就是,做一个API的过滤器。&nbsp;<BR>--&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那天是你用一块红布&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;蒙住我双眼也蒙住了天&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你问我看见了什么&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我说我看见了幸福&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<BR>&nbsp;<BR></FONT><FONT 
            color=#ff00ff>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;public.bjnet.ed]&nbsp;<BR>发信人:&nbsp;xiaobo&nbsp;(激情蕴于心中),&nbsp;信区:&nbsp;Programming&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;屏幕取词的方法&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Thu&nbsp;Nov&nbsp;27&nbsp;12:03:52&nbsp;1997)&nbsp;<BR>&nbsp;<BR>【&nbsp;在&nbsp;Hmmm&nbsp;(头大如斗然而非常高兴的Hmmm)&nbsp;的大作中提到:&nbsp;】&nbsp;<BR><FONT 
            color=#408080>: &nbsp;用钩子函数应该就可以。&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;有一个叫socket&nbsp;spy的程序就是,做一个API的过滤器。&nbsp;</FONT><BR>钩子只能过滤消息吧,如何过滤API?&nbsp;<BR>愿闻其详。&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>&nbsp;&nbsp;江声浩荡,自屋后上升......</FONT>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--《约翰.克利斯朵夫》&nbsp;<BR>&nbsp;<BR><FONT 
            color=#00ff00>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;166.111.26.20]&nbsp;<BR>发信人:&nbsp;ming&nbsp;(忙一阵子静一阵子),&nbsp;信区:&nbsp;Programming&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;屏幕取词的方法&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Thu&nbsp;Nov&nbsp;27&nbsp;13:48:35&nbsp;1997)&nbsp;<BR>&nbsp;<BR>【&nbsp;在&nbsp;youxu&nbsp;(糖猪)&nbsp;的大作中提到:&nbsp;】&nbsp;<BR><FONT 
            color=#408080>: 
            &nbsp;&nbsp;&nbsp;建议你去&nbsp;曙光站&nbsp;编程版看看,有一篇关于修改代码的文章.&nbsp;</FONT><BR>&nbsp;<BR>我以前在网上取下来过两段代码,可能也是在曙光站看的,&nbsp;记不清了。&nbsp;<BR>是在win3.1/95以及NT下屏幕截取的例子。&nbsp;<BR>&nbsp;<BR><A 
            href="ftp://166.111.79.141/Internet/Program/guihook.zip">ftp://166.111.79.141/Internet/Program/guihook.zip</A>&nbsp;&amp;&nbsp;guihooknt.zip&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;圣人忘情&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;最下不及情&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;情之所钟&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;正在我辈&nbsp;<BR>&nbsp;<BR></FONT><FONT 
            color=#0000ff>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;166.111.79.141]&nbsp;<BR>发信人:&nbsp;poncaly&nbsp;(庞卡莱VS机器猫),&nbsp;信区:&nbsp;Programming&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;屏幕取词的方法&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Fri&nbsp;Nov&nbsp;28&nbsp;14:15:08&nbsp;1997)&nbsp;<BR>&nbsp;<BR>【&nbsp;在&nbsp;xiaobo&nbsp;(激情蕴于心中)&nbsp;的大作中提到:&nbsp;】&nbsp;<BR><FONT 
            color=#408080>: &nbsp;钩子只能过滤消息吧,如何过滤API?&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;愿闻其详。&nbsp;</FONT><BR>&nbsp;<BR>&nbsp;&nbsp;过滤API函数有三种方法。&nbsp;<BR>&nbsp;1&nbsp;做一个DLLLL,在内部实现与被调用APAPI同名的函数,再把这个DDDLL放到系统DDDLL?nbsp;<BR>&nbsp;&nbsp;前面&nbsp;<BR>&nbsp;2&nbsp;修改AAAPI函数代码,设置断点或用JJJMMMPPP,CCCALLL指令。&nbsp;<BR>&nbsp;3&nbsp;在其他的进程中注入DDDLLLLL,有四种方法&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;设置钩子函数&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2在注册表中进行注册&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;&nbsp;中用CCCC函数,不过不适合9595&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;强行注入D,&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR></FONT><FONT 
            color=black>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;166.111.5.122]&nbsp;<BR>发信人:&nbsp;Dreammy&nbsp;(这个杀手不太冷),&nbsp;信区:&nbsp;Programming&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;屏幕取词的方法&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Sat&nbsp;Nov&nbsp;29&nbsp;13:47:29&nbsp;1997)&nbsp;<BR>&nbsp;<BR>【&nbsp;在&nbsp;xyj&nbsp;(rocky)&nbsp;的大作中提到:&nbsp;】&nbsp;<BR><FONT 
            color=#408080>: 
            &nbsp;可以看Matt&nbsp;Pietrek写的&lt;Windows&nbsp;95&nbsp;System&nbsp;Programming&nbsp;SECRETS&gt;&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;有中译本&lt;Windows&nbsp;95系统编程奥秘&gt;&nbsp;</FONT><BR><FONT 
            color=#408080>: &nbsp;需要了解PE文件格式和系统可执行文件的加载方式!&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;偶认为象博雅这样的取词是通过截获系统DLL(可能是GDI)中的TextOut或其&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;相关函数来实现的.系统DLL内存地址&gt;0X8000000(2G~4G),为所有&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;应用程序共享,地址空间固定,不象0~2G间的内存地址随不同的应用&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;程序而切换.&nbsp;</FONT><BR>这倒没有太大必要,因为博雅或其他字典都是16位的,做起来简单多了&nbsp;<BR>它们是NE(New&nbsp;Executable)&nbsp;,&nbsp;离Portable&nbsp;....&nbsp;还有点距离&nbsp;<BR>弟做过一个通用的API钩子模块,&nbsp;主要的问题没出在这,倒是处理重入(Reentry)&nbsp;<BR>的问题费了好大力气,还有,它们兼容性不好(如博雅,和CStar),这在我前面的&nbsp;<BR>一片RE里讨论过&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR></FONT><FONT 
            color=#0080ff>※&nbsp;修改:·Dreammy&nbsp;於&nbsp;Nov&nbsp;29&nbsp;14:06:36&nbsp;修改本文·[FROM:&nbsp;&nbsp;&nbsp;166.111.91.63]&nbsp;<BR></FONT><FONT 
            color=#800000>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;166.111.91.63]&nbsp;<BR>发信人:&nbsp;xyj&nbsp;(rocky),&nbsp;信区:&nbsp;Programming&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;屏幕取词的方法&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Mon&nbsp;Dec&nbsp;&nbsp;1&nbsp;10:13:39&nbsp;1997)&nbsp;<BR>&nbsp;<BR><FONT 
            color=#408080>: 
            &nbsp;:&nbsp;偶认为象博雅这样的取词是通过截获系统DLL(可能是GDI)中的TextOut或其&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;:&nbsp;相关函数来实现的.系统DLL内存地址&gt;0X8000000(2G~4G),为所有&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;:&nbsp;应用程序共享,地址空间固定,不象0~2G间的内存地址随不同的应用&nbsp;</FONT><BR><FONT 
            color=#408080>: &nbsp;:&nbsp;程序而切换.&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;这倒没有太大必要,因为博雅或其他字典都是16位的,做起来简单多了&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;它们是NE(New&nbsp;Executable)&nbsp;,&nbsp;离Portable&nbsp;....&nbsp;还有点距离&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;弟做过一个通用的API钩子模块,&nbsp;主要的问题没出在这,倒是处理重入(Reentry)&nbsp;</FONT><BR><FONT 
            color=#408080>: 
            &nbsp;的问题费了好大力气,还有,它们兼容性不好(如博雅,和CStar),这在我前面的&nbsp;</FONT><BR><FONT 
            color=#408080>: &nbsp;一片RE里讨论过&nbsp;</FONT><BR><FONT color=#408080>: 
            &nbsp;&nbsp;</FONT><BR>Sorry,前一篇没有说清楚!&nbsp;<BR>Win95下的GDI的核心代码是16位的,GDI32只是GDI16的一个外壳,&nbsp;<BR>所有象跛鸭之类的16位字典可以运行.&nbsp;<BR>由于GDI32处理了重入问题,因此在HOOK了GDI16的函数时,运行32位程序&nbsp;<BR>应该没有重入问题,但16位的恐怕就有些问题!&nbsp;<BR>&nbsp;<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 &copy; 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 + -