如何实现屏幕取词的功能,比如金山词霸用鼠标在屏幕上的某一个汉字或者英文单词鼠标单击,汉字和单词自动出现在编辑框中,比如tedit等控件中,分不够在加,不懂的不要UP谢谢合作

解决方案 »

  1.   

    方法:
    直接替换系统函数前5个字节,用jmp+我自己的函数地址替换,这样一旦系统函数调用就会跳到我自己的函数,首先恢复系统函数前5个字节,运行完我自己的函数,照样运行系统函数,然后再用jmp+我自己的函数地址替换系统函数前5字节
      

  2.   

    bluenightsky 能不能给我一个一个示范代码啊
      

  3.   

    用hook技术,不过,不会,超级猛可里有个介绍的
      

  4.   

    nyf1220(浅水游虫) 哪儿有下载的能告诉我嘛?谢谢
      

  5.   

    转载:
    “鼠标屏幕取词”技术是在电子字典中得到广泛地应用的,如四通利方和金山
    词霸等软件,这个技术看似简单,其实在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位汇编代码!
      

  6.   

    要实现取词,主要要解决以下技术问题。 
    1.截取API入口,获得API的参数。 
    2.安全地潜入Windows内部,良好地兼容Windows的各个版本 
    3.计算鼠标所在的单词和字母。 
    4.如果你在Window95下,做32位程序,还涉及Windows32/16混合编程的技术。 取词的过程: 0 判断鼠标是否在一个地方停留了一段时间 
    1 取得鼠标当前位置 
    2 以鼠标位置为中心生成一个矩形 
    3 挂上API钩子 
    4 让这个矩形产生重画消息 
    5 在钩子里等输出字符 
    6 计算鼠标在哪个单词上面,把这个单词保存下来 
    7 如果得到单词则摘掉API钩子,在一段时间后,无论是否得到单词都摘掉API钩子 
    8 用单词查词库,显示解释框。 
    很多步骤实现起来都有一些难度,所以在中国可以做一个完善的取词词典的人屈指可数 说如何挂钩子: 所谓钩子其实就是在WindowsAPI入口写一个JMP XXXX:XXXX语句,跳转到自己的代码里。 
    步骤如下: 
    1.取得Windows API入口,用GetProcAddress实现 
    2.保存API入口的前五个字节,因为JMP是0xEA,地址是4个字节 
    3.写入跳转语句 
    这步最复杂 
    Windows的代码段本来是不可以写的,但是Microsoft给自己留了个后门。 
    有一个未公开函数是AllocCsToDsAlias, 
    UINT WINAPI ALLOCCSTODSALIAS(UINT); 
    你可以取到这个函数的入口,把API的代码段的选择符(要是不知道什么是选择符,就先 
    去学学保护模式编程吧)传给他,他会返回一个可写的数据段选择符。这个选择符用完 
    要释放的。用新选择符和API入口的偏移量合成一个指针就可以写windows的代码段了。 这就是取词技术的最核心的东东,不止取词,连外挂中文平台全屏汉化都是使用的这种 
    技术。现在知道为什么这么简单的几句话却很少知道了吧?因为太多的产品使用他,太 
    多的公司靠他赚钱了。 
    这些公司和产品有:中文之星,四通利方,南极星,金山词霸,实达铭泰的东方快车, 
    roboword,译典通,即时汉化专家等等等等。还有至少20多家小公司。他们的具体 
    实现虽然不同,但大致原理是相同的。