📄 csdn_文档中心_电子词典中鼠标取词的原理.htm
字号:
<TD align=middle bgColor=#000000 colSpan=2 height=1 width=770></TD></TR>
<TR>
<TD align=middle bgColor=#004d99 height=28 width=150><FONT
class=title0>csdn.net</FONT></TD>
<TD align=middle width=620>
<SCRIPT src="CSDN_文档中心_电子词典中鼠标取词的原理.files/navigation1.js"></SCRIPT>
</TD></TR>
<TR>
<TD align=middle bgColor=#000000 colSpan=2 height=1
width=770></TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
<TBODY>
<TR>
<TD bgColor=#f3f9fc height=23 width=10></TD>
<TD bgColor=#f3f9fc>
<MARQUEE onmouseout=this.start() onmouseover=this.stop() scrollAmount=5
scrollDelay=80>
<SCRIPT src="CSDN_文档中心_电子词典中鼠标取词的原理.files/marquee.htm"></SCRIPT>
</MARQUEE></TD>
<TD align=right bgColor=#f3f9fc width=101>
<SCRIPT>document.write("<img src=http://count.csdn.net/count/pageview1.asp?columnid=4&itemid=11 border=0 width=0 height=0>");</SCRIPT>
<B>
<SCRIPT language=JavaScript>
<!--
document.ns = navigator.appName == "Netscape"
tmpDate = new Date();
date = tmpDate.getDate();
month= tmpDate.getMonth() + 1 ;
if(document.ns)
{
year1=tmpDate.getYear()
year= year1.toString().substr(1,2);
}
else
year= tmpDate.getYear();
document.write(year);
document.write(".");
document.write(month);
document.write(".");
document.write(date);
// -->
</SCRIPT>
</B> </TD></TR>
<TR bgColor=#999999>
<TD colSpan=3 height=1></TD></TR></TBODY></TABLE>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT src="CSDN_文档中心_电子词典中鼠标取词的原理.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文档中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> 电子词典中鼠标取词的原理</B> ghj1976(转贴)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> 电子词典中鼠标取词的原理</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出处</FONT></TD>
<TD height=10> <A
href="http://my.szptt.net.cn/vcdynasty/tips/prog/1.htm">http://my.szptt.net.cn/vcdynasty/tips/prog/1.htm</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<P align=left><BR>-- <BR><FONT
color=#ff0000>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.117.20.17] <BR>发信人: Dreammy (George), 信区: Programming <BR>标 题: Re: 谁知到电子词典中鼠标取词的原理? <BR>发信站: BBS 水木清华站 (Thu Nov 6 17:51:06 1997) <BR> <BR>【 在 dandan (dandan) 的大作中提到: 】 <BR><FONT
color=#408080>:
如题。 </FONT><BR>据我所知,解决方案一般有两种,都是针对如何知道当前屏幕任一坐标出的 <BR>字符的 <BR>1.采用截获对部分GDI的API调用来实现,如TextOut , DrawText , TextOutEx等, <BR>字典对每次写屏操作进行跟踪. <BR> 技术细节就不赘述乐 <BR> 这种方法也在一些中文系统如中文之星等中采用,另外,有些第三方的字体, <BR>如ADobe等,也是这个方法(参阅<<Undocumented Windows>>(Andrew Schulman)) <BR>2.对每个设备上下文(DC)做一分Copy,并跟踪所有修改上下文(DC)的操作 <BR>这种方法更强大,但兼容性不好 <BR> <BR>实际上,无论那种方法,都有潜在的问题,如第一种方法,它在WIN95下 <BR>时仍是16位方式的(32位技术困难较大),这样就隐含了一个假定:所有 <BR>文本输出的32位API都要通过16位的DLL实现,在WIN95中的确如此,担高版本 <BR>就难说了 <BR>而且即使是第一种方法也容易带来兼容性的问题,比如博雅和中文之星2.0之间就有 <BR>一定的兼容性问题(WIN95下) <BR> <BR> <BR> <BR> <BR>-- <BR></FONT><FONT
color=#0080ff>※ 修改:·Dreammy 於 Nov 6 17:57:23 修改本文·[FROM: 166.111.78.230] <BR></FONT><FONT
color=#00ff00>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.78.230] <BR>发信人: Gryphon (刘姥姥), 信区: Programming <BR>标 题: Re: 谁知到电子词典中鼠标取词的原理? <BR>发信站: BBS 水木清华站 (Thu Nov 6 21:33:32 1997) <BR> <BR>【 在 dandan (dandan) 的大作中提到: 】 <BR><FONT
color=#408080>:
如题。 </FONT><BR> <BR> 我是听过有人说,但不清楚。 <BR> 具体的情况是:启动抓字程序的时候将GDI库中的TexOut截取出来。 <BR>当Mouse移动到那里后,就取到了。 <BR> 我没做过,可能不正确 <BR> <BR>-- <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.89.244] <BR>发信人: lshi (海风), 信区: Programming <BR>标 题: Re: 谁知到电子词典中鼠标取词的原理? <BR>发信站: BBS 水木清华站 (Thu Nov 6 22:30:48 1997) <BR> <BR>【 在 Gryphon (刘姥姥) 的大作中提到: 】 <BR><FONT
color=#408080>:
我是听过有人说,但不清楚。 </FONT><BR><FONT
color=#408080>:
具体的情况是:启动抓字程序的时候将GDI库中的TexOut截取出来。 </FONT><BR><FONT
color=#408080>: 当Mouse移动到那里后,就取到了。 </FONT><BR><FONT
color=#408080>:
我没做过,可能不正确 </FONT><BR> <BR>嘿嘿,你说的一点都没错。我最近正想做一个,不知能不能做出来。 <BR>-- <BR> <BR> </FONT> <BR> 雄关漫道真如铁 <BR> 而今迈步从头越 <BR> <BR> ..........好慢好慢啊,而今迈步从头爬 <BR> <BR><FONT
color=#ff0000>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.112.145.96] <BR>发信人: xiaobo (激情蕴于心中), 信区: Programming <BR>标 题: 屏幕取词的方法 <BR>发信站: BBS 水木清华站 (Thu Nov 27 01:28:16 1997) <BR> <BR>就是“金山词霸”、“博雅”这些词典都有的功能。 <BR> <BR>今天做了一个实验,终于大致明白它是怎么实现的。 <BR>实验很简单,自己写个程序,在OnPaint()里写一句MessageBeep(-1); <BR>让PC喇叭发声。 <BR> <BR>然后运行这个程序和“金山词霸”(“博雅”也一样下面以“词霸”为例), <BR>当鼠标在自己程序的窗口上停下一会儿(就是取词的等待时间)之后,PC喇叭就会发声, <BR>同时鼠标也会闪一下。 <BR> <BR>这说明,鼠标停下之后窗口会重画,这必然是“金山词霸”引起的。 <BR>其目的是好让这个窗口产生API调用,以截取TextOut()、DrawText()等函数。 <BR>这样“词霸”就可以获取该窗口中输出的字符串了,然后再根据鼠标位置作 <BR>判断,就可以得到鼠标所指的字符(单词)了。 <BR> <BR>这些只是我的推断,不知是否正确,望高手指正。 <BR> <BR>另外,我还不明白的是该如何截取API调用呢?(这项技术很有用的。) <BR>GetProcAddress()之后应该用自己的函数取代它,然后再调用原来的吧。 <BR>可是怎么实现呢?请指点一二。 <BR> <BR>-- <BR> 江声浩荡,自屋后上升......</FONT> <BR> --《约翰.克利斯朵夫》 <BR> <BR><FONT
color=#0080ff>※ 修改:·xiaobo 於 Nov 27 08:05:21 修改本文·[FROM: 166.111.26.20] <BR></FONT><FONT
color=#800000>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.26.20] <BR>发信人: xyj (rocky), 信区: Programming <BR>标 题: Re: 屏幕取词的方法 <BR>发信站: BBS 水木清华站 (Thu Nov 27 08:33:11 1997) <BR> <BR>【 在 xiaobo (激情蕴于心中) 的大作中提到: 】 <BR><FONT
color=#408080>:
另外,我还不明白的是该如何截取API调用呢?(这项技术很有用的。) </FONT><BR><FONT
color=#408080>:
GetProcAddress()之后应该用自己的函数取代它,然后再调用原来的吧。 </FONT><BR><FONT
color=#408080>:
可是怎么实现呢?请指点一二。 </FONT><BR>可以看Matt Pietrek写的<Windows 95 System Programming SECRETS> <BR>有中译本<Windows 95系统编程奥秘> <BR>需要了解PE文件格式和系统可执行文件的加载方式! <BR>偶认为象博雅这样的取词是通过截获系统DLL(可能是GDI)中的TextOut或其 <BR>相关函数来实现的.系统DLL内存地址>0X8000000(2G~4G),为所有 <BR>应用程序共享,地址空间固定,不象0~2G间的内存地址随不同的应用 <BR>程序而切换. <BR> <BR>-- <BR>________________________ <BR>Rocky <BR>To be, not to be!!! <BR>^^^^^^^^^^^^^^^^^^^^^^^^ <BR> <BR></FONT><FONT
color=black>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 203.93.44.131] <BR>发信人: Hmmm (头大如斗然而非常高兴的Hmmm), 信区: Programming <BR>标 题: Re: 屏幕取词的方法 <BR>发信站: BBS 水木清华站 (Thu Nov 27 09:04:34 1997) <BR> <BR>【 在 xiaobo (激情蕴于心中) 的大作中提到: 】 <BR><FONT
color=#408080>: 就是“金山词霸”、“博雅”这些词典都有的功能。 </FONT><BR><FONT
color=#408080>: 今天做了一个实验,终于大致明白它是怎么实现的。 </FONT><BR><FONT
color=#408080>:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -