请问子类技术与hook技术有什么关系?

解决方案 »

  1.   

    子类(SubClass)技术简介
    众所周知,Windows是一个基于消息的系统,消息在Windows的对象之间进行着传递。子类(SubClass)和Windows的钩子(Hook)机制存在于消息系统之中,我们可以利用这些机制来操纵、修改甚至丢弃那些在操作系统或是进程中传递的消息,以求改变系统的一些行为。
    子类(SubClass)技术用来拦截窗口或控件之间的消息,当然是消息在到达目的窗口之前完成的操作。这些被拦截的消息既可以保留也可以修改它们的状态,之后就继续发送到目的地。子类技术实现了一些正常情况下无法实现的功能,试想鼠标右键单击TextBox,系统默认弹出Undo、Cut、Copy、Paste等菜单,我们就可以利用子类技术来改变这个系统菜单。
    简单的说,子类(SubClass)技术就是创建一个新的窗口消息处理过程,并将其插入到原先的默认窗口消息处理过程之前。对于有点OO知识的人来说,这个名称很好理解,因为它继承了上级窗口的一些属性和方法并且加入了自己特有的内容。同样的,超类(SuperClass)技术与之相对,它通过改变父类的特性以求改变其派生类的共同特性,这里不是我们的讨论重点,因此略过。
    子类技术的原理:要先取得原先Window Procedure所在的地址,将之记录起来,接着设定所有的消息都先转到我们所写的消息处理过程上来,我们过滤传过来的消息,寻找特定的消息进行处理,其余的送回系统,由系统决定如何处理。等到我们不需要再处理这些特定的消息时,便取消拦截,即中止子类过程。它一般需要三个过程:开始拦截,消息处理,中止拦截。
      

  2.   

    vbd的子类技术属于hook的一种,是local hook。。
      

  3.   

    子类技术是hook技术的一种实现。
      

  4.   

    子类属于本地的hook,就是自己hook自己