来源:www.cncfan.com | 2006-1-10 | (有2047人读过)
一 公开它!
四通利方和金山词霸的用户都曾见识过屏幕抓字技术,鼠标指哪就翻译哪个单词,这个技术看似简单,其实在WINDOWS系统中实现却是非常复杂和有趣的。经过半年多的艰辛探索,笔者终于破解了其中的秘密,并在今天决定公开它,这个人人都曾见过但是却鲜有人知的秘密,这个只被 几家软件公司垄断从未在公开的报刊资料披露过只言片语的秘密!
经过这半年多的探索,现在都终于有了结果:将屏幕抓字技术的秘密公开,献给孜孜不倦辛勤工作的程序员们。
二 初识屏幕抓字
最初知道屏幕抓字,是在购买了《英汉通》软件之后。 当时笔者还只是一个VISUAL BASIC 的初学者, 对WINDOWS系统内部的知识了解并不多,认为在WINDOWS系统中屏幕抓字的实现应该和DOS系统中的一样,调用一个DOS中断取屏幕上的字符或直接读显示内存的内容就可以了。
三 看似很简单,其实不然
随着对WINDOWS系统的认识不断深入,才发现问题并不象想得那么简单。首先,翻阅了WINODWS应用程序接口(API)中的上千个函数,并没有发现有一个现成的类似于getWordFromPoint()的函数;根据使用经验,经过判断发现屏幕抓字采用的也不是图像识别技术;翻阅了SDK的联机文档中没有,DDK的联机文档中也没有;显示卡编程接口的资料则很难获得,有的也只是CGA到VGA显存的基本知识。回想当时坐在机子前,面对一屏屏的联机资料(如果是纸,将堆积如山),感觉就是在黑暗中的大海里航行,没有方向,没有灯光,但强烈的兴趣紧抓着我,一定要把这个谜解开。
四 选择合适的编程工具
突然又有了一些新的想法:可否试着截获WINDOWS中关于字符的消息呢?DC(设备描述表)到底是什么?WINDOWS的TextOut函数是否将TEXT放在DC的某个单元中?显然,用VISUALBASIC就力不从心了。在DOS中用TURBOC编程笔者还算熟练,因此先尝试用VISUALC++,但是奇慢的编译速度使人难以忍受,高度抽象的类让人一头雾水,开发商务软件可能还行,但开发这样一个深入WINDOWS内部的系统软件,望着一堆缠绕不清的类和消息,真有点牛刀宰鸡、刺刀耕田的感觉。
最后选择了DELPHI,第一印象是编译速度真快,在我的祖父型386机子上编译一个WINDOWS程序,速度和用TURBOC的速度感觉差不多,真让人兴奋得爱不释手。随着不断使用,发觉DELPHI真是一个好的快速开发工具,(快速并不意味着简单粗糙,而是和WINDOWS系统有混然一体良好接口的表现)让初学者也很容易上手。
调用各种WINDOWS 函数(包括很多未公开的函数)都非常直接迅速,用它来作开发工具,大有刺刀见红、一剑封喉的痛快感觉。
|