HOOK的理解

    一不小心点了一下csdn的blog,却发现自己不知道什么时候已经注册了,嘿嘿,一直也没有在这里留下任何印记,罪过。刚好今天看了孙鑫的最后一课,写一下自己对HOOK的理解吧。

    HOOK,也就是钩子函数,要理解这个,首先要明白windows的回调机制。windows程序必须要有一个窗口,有了窗口才能接收消息。当收到任何消息的时候,总是由windows系统来对程序在注册窗口类的时候注册的窗口函数进行调用,发给程序的所有的消息都是在这个窗口过程中进行处理。那么我们想拦截消息的话,最方便的地方应该是在哪里?

    当然是在系统调用窗口函数前,在系统中对消息进行拦截。而HOOK函数的作用就是这个,使用HOOK前先要进行安装,调用SetWindowsHookEx函数,其函数原型为:

HHOOK SetWindowsHookEx(
  int idHook,        // hook type
  HOOKPROC lpfn,     // hook procedure
  HINSTANCE hMod,    // handle to application instance
  DWORD dwThreadId   // thread identifier
);
第一个参数为HOOK类型,也就是你要选择键盘钩子还是鼠标钩子(当然钩子的种类很多,自己慢慢选:))
第二个参数就是钩子回调函数,也就是你勾挂上消息(拦截消息总不能白拦截吧,起码打上自己的标记吧)
后,可以在这个函数中对消息进行处理,方法同窗口回调函数。
第三个参数是一个DLL句柄,如果你安装一个本地钩子,那么就应该把这个参数设为NULL,否则就
应该是你的钩子函数所在的DLL的句柄(除了本地钩子外,其他钩子都应该在一个DLL文件中,这个我也
不知道为什么,呵呵)。
第四个参数是线程ID,如果是本地钩子,用函数GetCurrentThreadID就好,如果这个参数为0,
那么就安装一个全局钩子,也就是说系统桌面上运行的所有程序的消息都要先从你这里经过,
厉害吧,如果在这里随便做个手脚,呵呵。
这个函数的返回值是一个HHOOK的句柄,一般在卸载钩子的时候使用。
说了安装,当然要说卸载了。
卸载的时候使用UnhookWindowsHookEx这个函数
BOOL UnhookWindowsHookEx(
  HHOOK hhk   // handle to hook procedure
);
其中唯一的参数就是前面安装的时候的HHOOK句柄,当然你安装了几个钩子就要卸载几次了。
一下子打了这么多,累啊。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值