请问子类技术与hook技术有什么关系?
解决方案 »
- 什么垃圾论坛,一会能跟贴,一会又不能跟贴,这种垃圾产品也能上线,服了
- 如何使多行文本框在用程序添加内容时,总能使用户看到添加的内容(即滚动条始终处于最下端)?
- 如何用Shell运行以下命令
- 我想在 自定义控件 里实现这个很简单的功能
- LISTVIEW中item与图片邦定,但是item可以在其范围内拖动,怎样可以禁止拖动?
- 急的我头发都白了!如何在VBA中利用Windows Media Player控件实现声音报警?
- 急急急:有关VB打包!
- VB点滴
- ★★★★请问在VB里面如何用Excel对象读取Excel 文件 导出数据
- 利润增长率怎么算?
- 谁帮我把这段VBA转换成VC?
- 用VB6 winsock/ado等实现的一个自动处理程序,能不能转成后台服务
众所周知,Windows是一个基于消息的系统,消息在Windows的对象之间进行着传递。子类(SubClass)和Windows的钩子(Hook)机制存在于消息系统之中,我们可以利用这些机制来操纵、修改甚至丢弃那些在操作系统或是进程中传递的消息,以求改变系统的一些行为。
子类(SubClass)技术用来拦截窗口或控件之间的消息,当然是消息在到达目的窗口之前完成的操作。这些被拦截的消息既可以保留也可以修改它们的状态,之后就继续发送到目的地。子类技术实现了一些正常情况下无法实现的功能,试想鼠标右键单击TextBox,系统默认弹出Undo、Cut、Copy、Paste等菜单,我们就可以利用子类技术来改变这个系统菜单。
简单的说,子类(SubClass)技术就是创建一个新的窗口消息处理过程,并将其插入到原先的默认窗口消息处理过程之前。对于有点OO知识的人来说,这个名称很好理解,因为它继承了上级窗口的一些属性和方法并且加入了自己特有的内容。同样的,超类(SuperClass)技术与之相对,它通过改变父类的特性以求改变其派生类的共同特性,这里不是我们的讨论重点,因此略过。
子类技术的原理:要先取得原先Window Procedure所在的地址,将之记录起来,接着设定所有的消息都先转到我们所写的消息处理过程上来,我们过滤传过来的消息,寻找特定的消息进行处理,其余的送回系统,由系统决定如何处理。等到我们不需要再处理这些特定的消息时,便取消拦截,即中止子类过程。它一般需要三个过程:开始拦截,消息处理,中止拦截。