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

📄 屏幕抓字教程.htm

📁 类似金山词霸的屏幕取词示例代码.rar
💻 HTM
📖 第 1 页 / 共 2 页
字号:

<ul type="square">
  <li><a name="Tworm简介">Tworm简介</a> </li>
</ul>

<p>“屏幕抓字”的关键是拦截api 
函数,为了安全的考虑,我把拦截跟踪的具体细节封装成了一个类Tworm,我叫它作蠕虫类,意思是可以钻到别的WINDOWS 
API的肚子中.这样就不再需要研究原代码,直接调用Tworm可以实现对Windows3.1的 
API中任意函数进行拦截,跟踪,改变。我把Tworm编译成Tworm.dcu,在DELPHI中可以用Uses 
Tworm; 来使用.</p>

<p>在win 9x中,Tworm 照样可以用来拦截32-bit的函数。装了win 98之后,经过这段时间的研究,我发现win 
98根本不是象微软宣传的那样是真正的32位操作系统!拦截win 9x中32位函数的方法很简单,那就是拦截同名的win 
3.1中的16位函数,调用我软件包中的TWORW 类通过拦截16位函数就能拦截32位的win 
9x中的函数!你可以试一试。 

<ul type="square">
  <li><a name="Tworm拦截WIN API函数的使用方法"><strong>Tworm拦截WIN API函数的使用方法</strong></a> 
  </li>
</ul>

<p>用法如下:(请用DELPHI 1 编译)</p>

<p>uses Tworm;</p>

<p>var w1,w2:Tworm; {可以声明多个对象w1,w2,w3,对多个函数实施拦截}</p>

<p>w1:=Tworm.create; {创建两个新对象}</p>

<p>w2:=Tworm.create;</p>

<p>w1.oldProc:=getProcAddress(getModuleHandle('gdi','TextOut');</p>

<p>w1.newProc:=getProcAddress(getModuleHandle('my_DLL','myTextOut');</p>

<p>w1.change; {设置拦截1}</p>

<p>{....系统调用TextOut时被拦截进入myTextOut;}</p>

<p>w1.restore; {解除拦截1}</p>

<p>w2.oldProc:=getProcAddress(getModuleHandle('win_api_dll','any_win_api_fun');</p>

<p>w2.newProc:=getProcAddress(getModuleHandle('my_DLL',' my_trace_fun');</p>

<p>w2.change; {设置拦截2}</p>

<p>......系统调用any_win_api_fun()就会被拦截进入my_trace_fun()内部....</p>

<p>......在my_trace_fun()内部,你可编程干你想干的任何事情.........</p>

<p>{即:每一个win api函数都可能被拦截进入我的跟踪函数内部,在我的跟踪函数里,你可以恢复原来的函数,并干任何事情}</p>

<p>w2.restore; {解除拦截2}</p>

<p>w1.free; {释放对象1}</p>

<p>w2.free; {释放对象2} 

<ul type="square">
  <li>免费下载TWORM的演示版:<a href="worm.dcu">worm.dcu</a> 大小:3K。 </li>
  <li>您可以在1个DLL中,用 worm.dcu 拦截任意多个WIN 9x API 函数。 </li>
</ul>

<ul type="square">
  <li><a name="Tworm演示版的限制">Tworm演示版的限制</a> </li>
</ul>

<p>为了控制拦截技术的流向,考虑到计算机系统安全的原因,我不希望有朝一日,你我自己的计算机会成为采用拦截技术的黑客程序的牺牲品!!!</p>

<p>为此,我在供免费下载的Twrom.dcu的演示版中加入2个限制:</p>

<p>1 每次远行时间超过5分钟后,向您提示这是演示版,并退出。不会耽搁您的编译和调试工作,因为您可以在编译后,通过多次远行Tworm来调试程序。</p>

<p>2 开始运行时,有一声BEEP。</p>

<blockquote>
  <p>免费下载:用Tworm拦截BeginPaint()的例子<a href="BeginPaint.zip">BeginPaint.zip</a> 
  含原代码</p>
  <p>免费下载:用Tworm拦截TextOut()和ExtTextOut()实现“全屏变色”的例子,是“全屏汉化”的基础: 
  <a href="TextOut.zip">TextOut.zip</a> 含原代码</p>
  <p>(我开发的能在Acrobat Reader 3,IE4,IE5,NETSCAPE,OFFICE 97等环境下运行的屏幕抓字程序 
  <a href="freedict.zip">freedict.zip</a> 就是以 <a href="TextOut.zip">TextOut.zip</a> 
  为起点的。)</p>
</blockquote>

<ul type="square">
  <li><a name="Win9x的核心是WIN16吗?">Win9x的核心是WIN16吗?</a> </li>
  <li><a name="为什么16-bit的Tworm能拦截32-bit的TextOutA()?">为什么16-bit的Tworm能拦截32-bit的TextOutA()?</a> 
  </li>
</ul>

<p>微软说w16的api只是为了兼容性才保留下来,程序员应该尽可能地调用32位的api,实际上根本就不是这样!<font
color="#ff0000">win 98(也应该包含win 95)内部的32位api大量地调用了win 3.1中同名的16位api,</font>估计可能超过80%的32位api经过变换调用了同名的16位api。可以说win 
3.1是win9x的基石,没有win 3.1, win 9x立即就会崩溃。win 9x 的ExtTextOutA,ExtTextOutW,TextOutA,TextOutW等函数就调用了win 
3.1中的EXTTEXTOUT,TEXTOUT,千真万确!那么拦截win 9x中32位函数的方法就找到了,那就是拦截同名的win 
3.1中的16位函数,调用我软件包中的TWORW 类通过拦截16位函数就能拦截32位的win 
9x中的函数!你可以试一试。因为<font color="#ff0000">win 9x本身是一种16位与32位代码混合的操作系统</font>,并且很严重地依靠着16位代码,所以w16 
编程可算是win 9x 编程中的秘密武器了,而且将非常厉害! </p>

<h3>第四课 IE4和IE5下的屏幕抓字</h3>

<ul type="square">
  <li><a name="屏幕抓字的DLL原理">屏幕抓字的DLL原理</a> </li>
</ul>

<p>我在编写“屏幕抓字”时,在IE4,IE5中遇到的的几个特别之处:</p>

<p>1 在IE4编写屏幕抓字的程序,我遇到的问题是如何拦截统一编码UNICODE。</p>

<p>2 IE4描绘英汉混合的文字时,英语和汉语分别用1个EXTTEXTOUT()输出;</p>

<p>3 IE5测试版(<font color="#ff0000">IE 5.00.0518.10</font>)描绘英汉混合的文字时,英语和汉语共用1个EXTTEXTOUT()输出;</p>

<p>4 IE5正式版 (<font color="#ff0000">IE 5.00.2014.0216</font>) 
描绘文字时,除了英语和汉语共用1个EXTTEXTOUT()输出;还有一个特点:当窗口比较小时,用和IE4,IE5测试版一样定位方法来决定X,Y的值,而在窗口较大时,用相对于每行基准线的定位方法来决定X,Y的值。</p>

<p>5 IE5测试版和正式版对系统的改变不一样,如IE5测试版中,SysListView32窗口类描绘文字用ExtTextoutW(),而在IE4和IE5正式版中用了ExtTextOutA();</p>

<p>上述4个特点,在编程时少不留意,轻者或是不能拦截,或是不能定位;重者就会使IE的堆栈崩溃,造成死机。</p>

<p>我用了2个星期的时间解决了上述问题,终于在WIN9x系统中,完成了IE4,IE5,NETSCAPE,OUTLOOK 
EXPRESS4,5,OFFICE 97,等应用程序环境下的屏幕抓字。我把屏幕抓字做成了一个动态连接库,DEMO.DLL,放在 
<a href="freedict.zip">freedict.zip</a> 中,可以供32-bit或16-bit的程序调用。</p>

<p>该DLL的编程原理为:在定时器中判断鼠标位置,如果鼠标移动,在鼠标下放置一个长度为1,高度为1的象针尖一样小的窗口,然后隐藏它;因为针尖窗口“弄脏”了屏幕,WIN9x系统会通知应用程序(IE,NETSCAPE,OFFICE等)重绘该点,应用程序会调用TEXTOUT,TEXTOUTA,TEXTOUTW等函数来描绘TEXT,而TEXTOUT,TEXTOUTA,TEXTOUTW等函数被我早以设好的TWorm拦截,在应用程序的堆栈中得到指向字符串的指针LPSZ,LPSZ所指向的TEXT既是要抓的字。 

<ul type="square">
  <li><a name="屏幕抓字的DLL功能">屏幕抓字的DLL功能</a>和特点 </li>
</ul>

<p>1:可以拦截<font color="#ff0000">Acrobat Reader 3</font>,IE4,IE5测试版,<font
color="#ff0000">IE5正式版</font>,NETSCAPE,OUTLOOK EXPRESS,FRONTPAGE Express 2,OFFICE97等各种应用程序。</p>

<p>2: 防闪烁功能<font face="宋体" size="2">。</font>重复抓字时,字典窗口的位置会自动锁定。</p>

<p>3:可以和RICH WIN ,XDICT共存,且互不影响。当因为先装载RICH WIN并先退出RICH 
WIN时,造成不能抓字后,按“reHook”按钮即可恢复抓字功能。</p>

<p>4:可以将抓到的字词传递给32-bit的应用程序。</p>

<p>5:可以抓到动态滚动的字幕中的字词。</p>

<p>6:不影响IE,NETSCAPE等应用程序的运行速度。</p>

<p>7: 在WIN9X中运行很稳定 

<ul type="square">
  <li><a name="与“金山词霸”的比较">与“金山词霸”的比较</a> </li>
</ul>

<p>我对比了XDICT,感到并不逊色,都可以拦截IE5,IE4,而且我的程序也很稳定,测试时未发现死机现象。 

<ul type="disc">
  <li>免费下载,屏幕抓字的演示版 <a href="freedict.zip">freedict.zip</a> 可在WIN 
    9x系统中,Acrobat Reader 3.0, IE5,IE4,OUTLOOK EXPRESS 4,OUTLOOK EXPRESS 5,FRONTPAGE 
    EXPRESS 2,NETSCAPE,OFFICE 97,WIN HELP,DELPHI等各种环境中运行,展示了电子字典(如金山词霸,四同立方等)的动态拦截抓取屏幕字词的关键技术。 
    <blockquote>
      <p>欢迎下载,测试,并免费使用“屏幕抓字”的动态连接库:DEMO.DLL。</p>
    </blockquote>
  </li>
</ul>

<hr>

<h3>欢迎各路编程高手们使用TWROM,来信交流,指正。</h3>

<p>马飞涛</p>

<p><strong><a href="../../../../index.htm">首页</a>》<a href="../../../index.htm">本地下载</a>》<a
href="../../index.htm">源码</a>》<a href="../index.htm">Windows</a>》<a
href="index.htm">屏幕抓词</a></strong></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -