• 鼠标屏幕取词技术


    二、小故事串起来,就是秘密所在
    别以为刚才那几个小故事都是杂乱无章地堆在一起,只要你把它们看明白了,那取词的秘密也就大白于天下了。让我们看看词霸在几个小故事中各扮演了什么角色……

    1.获得鼠标当前位置
    通过HOOK机制钩住系统中的鼠标消息,那就能在所有的窗口中获得鼠标的位置了。
    2.向鼠标下的窗口发重画消息
    通过调用几个API函数,程序就能得到当前鼠标位置下窗口(此窗口泛指窗口、菜单、按钮等界面元素)的控制权,然后冒充系统向它发送“窗口重画”的消息,那收到消息的窗口就会调用系统中的API(TextOut等)来重画了。
    3.截获API调用参数
    程序调用显示文字的API,当然不可能只是告诉它“画”,还必须告诉它“画什么”,因此,在API函数调用时还附带了一个参数,在显示文字的调用中,这个参数当然就是要显示的文字。于是,取词程序编写了自己的文字显示函数,用它的地址冒充API的真实地址,于是对显示文字API的调用都必须通过取词程序的显示函数,至此,要显示的文字就被截获了。

    小知识:你不知道的其他秘密
    ★东方快车,南极星就是用这样的原理完成界面翻译和内码转换的。
    ★在鼠标取词时,被取词的位置经常会闪烁一下,这就是窗口的重画消息在“作怪”。

    “鼠标屏幕取词”技术是在电子字典中得到广泛地应用的,如四通利方和金山词霸等软件,这个技术看似简单,其实在WINDOWS系统中实现却是非常复杂的,总的来说有两种实现方式:

      第一种:采用截获对部分GDI的API调用来实现,如TextOut,TextOutA等。

      第二种:对每个设备上下文(DC)做一分Copy,并跟踪所有修改上下文(DC)的操作。

      第二种方法更强大,但兼容性不好,而第一种方法使用的截获WindowsAPI的调用,这项技术的强大可能远远超出了您的想象,毫不夸张的说,利用WindowsAPI拦截技术,你可以改造整个操作系统,事实上很多外挂式Windows中文平台就是这么实现的!而这项技术也正是这篇文章的主题。

      截WindowsAPI的调用,具体的说来也可以分为两种方法:

      第一种方法通过直接改写WinAPI 在内存中的映像,嵌入汇编代码,使之被调用时跳转到指定的地址运行来截获;第二种方法则改写IAT(Import Address Table 输入地址表),重定向WinAPI函数的调用来实现对WinAPI的截获。

      第一种方法的实现较为繁琐,而且在Win95、98下面更有难度,这是因为虽然微软说WIN16的API只是为了兼容性才保留下来,程序员应该尽可能地调用32位的API,实际上根本就不是这样!WIN 9X内部的大部分32位API经过变换调用了同名的16位API,也就是说我们需要在拦截的函数中嵌入16位汇编代码!

      我们将要介绍的是第二种拦截方法,这种方法在Win95、98和NT下面运行都比较稳定,兼容性较好。由于需要用到关于Windows虚拟内存的管理、打破进程边界墙、向应用程序的进程空间中注入代码、PE(Portable Executable)文件格式和IAT(输入地址表)等较底层的知识,所以我们先对涉及到的这些知识大概地做一个介绍,最后会给出拦截部分的关键代码。

  • 相关阅读:
    formValidator表单验证
    js中判断一个对象的类型的种种方法
    利用jQuery中的serialize方法大量获取页面中表单的数据,发送的服务器
    用html和css写一个头部header和左侧菜单栏menu-bar固定的的页面
    关于刚才那个全选问题的解决
    关于input[type='checkbox']全选的问题
    用CSS来定义<p>标签,要求实现以下效果:字体颜色再IE6下为黑色,IE7下为红色,IE8下为绿色,其他浏览器下为黄色。
    Vue.js(20)之 封装字母表(是这个名字吗0.0)
    Vue.js之calendar组件
    书:构造器模式
  • 原文地址:https://www.cnblogs.com/dragonsuc/p/1378280.html
Copyright © 2020-2023  润新知