请问金山词霸的“屏幕取词”是怎样实现的?!他是用API函数实现的吗?!是的话那又是怎样实现的呢?!请朋友们赐教,谢谢先!

解决方案 »

  1.   

    以前有这类问题。
    记得是HOOK了TextOut系列API
      

  2.   

    转:“ 屏幕抓字”的实现 1 用SetWindowsHookEx()安装鼠标钩子MouseProc; 
    2 在屏幕上移动鼠标时,系统就会调用鼠标钩子MouseProc; 
    3 进入MouseProc,获得鼠标的坐标(x,y), 
    设置对TextOut()、ExtTextOut()等的跟踪程序, 
    用invalidateRect()告诉系统该点(x,y)“失效”; 
    4 
    系统发出WM_PAINT消息,指示该点(x,y)处的应用程序重绘“失效”的区域。 
    5 负责绘制该点()的应用程序在受到 WM_PAINT 消息后, 就有机会调用 TextOut()、 ExtTextOut()等函数。 
    6 调用的函数被拦截进入跟踪程序:设置好了的跟踪程序截获了该次调用, 
    从 应用程序的堆栈中取出 该点(x,y)“文字”的指针; 
    7 从应用程序的数据段中将“文字”指针的内容取出,即完成了一次“屏幕 
    抓 字”; 
    8 退出跟踪程序,返回到鼠标钩子MouseProc; 
    9 在MouseProc中解除对TextOut() ExtTextOut()的跟踪; 
    10 退出MouseProc鼠标钩子程序,控制权交给系统。 
    11 在屏幕上移动鼠标,开始下一次“屏幕抓字”,返回步骤2。没试过
      

  3.   

    http://member.netease.com/~inetsoft/downloads/sourcecode/windows/freedic/index.htm
      

  4.   

    楼主我可以告诉你,,在中国没有几个人能做出像样的取词程序的,,,说的明白些没有几个人能有那样的技术,,,我在家中的机器中有过一位高手和许多delphibbs讨论这项技术的文档,,,我看到过了,,,写的基本思路是对,,但要是真正实现起来是很技术的,,不是那样简单的,,,
      

  5.   

    金山是这么实现的:IHook.dll     - 设置鼠标hook及参数
    ITextOut.dll  - 输出API捕捉函数,包括:
      xeCreateFont
      xeDrawText
      xeDrawTextW
      xeExtTextOut
      xeExtTextOutW
      xeGetACP
      xeGetTextExtentPoint32
      xeGetTextExtentPoint32W
      xeGetTextSize
      xeGetTextSizeW
      xeSetACP
      xeTextOut
      xeTextOutW你用些工具监视一下金山词霸就明白了。不过我是用VC,不会delphi。