高手请进来 如何实现屏幕取词的功能,比如金山词霸用鼠标在屏幕上的某一个汉字或者英文单词鼠标单击,汉字和单词自动出现在编辑框中,比如tedit等控件中,分不够在加,不懂的不要UP谢谢合作 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方法:直接替换系统函数前5个字节,用jmp+我自己的函数地址替换,这样一旦系统函数调用就会跳到我自己的函数,首先恢复系统函数前5个字节,运行完我自己的函数,照样运行系统函数,然后再用jmp+我自己的函数地址替换系统函数前5字节 bluenightsky 能不能给我一个一个示范代码啊 用hook技术,不过,不会,超级猛可里有个介绍的 nyf1220(浅水游虫) 哪儿有下载的能告诉我嘛?谢谢 转载:“鼠标屏幕取词”技术是在电子字典中得到广泛地应用的,如四通利方和金山词霸等软件,这个技术看似简单,其实在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位汇编代码! 要实现取词,主要要解决以下技术问题。 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多家小公司。他们的具体 实现虽然不同,但大致原理是相同的。 关于dbgrid的问题 电子图书下载 我问一个算法问题,很急 有关调用OUTLOOK发邮件的"抄送"问题..... 什么意思?(在线等) 请问各位,如何在列出WIN2K域上的所有用户? delphi7.0 有个控件叫cooltray 里面的demo演示源码,没找到双击托盘图标显示窗口的语句! 请问如何在程序中运行帮助文件(*.chm or *.hlp)? 怎样得到Listview的ListItem的高度,和宽度? 这样的报表如何实现? ADO连接,如何控制字段可以为空值? 怎样通过程序实现下载另外一台机子的文件(通过映射盘)?
直接替换系统函数前5个字节,用jmp+我自己的函数地址替换,这样一旦系统函数调用就会跳到我自己的函数,首先恢复系统函数前5个字节,运行完我自己的函数,照样运行系统函数,然后再用jmp+我自己的函数地址替换系统函数前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位汇编代码!
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多家小公司。他们的具体
实现虽然不同,但大致原理是相同的。