钩子
HOOK介绍
- HOOK(钩子)是一种特殊的消息处理机制,在Windows中,它监视系统中发生的各种事件消息,截获发往目标窗口的消息并予以处理
- Windows系统提供了HOOK的系统接口
sequenceDiagram
A->>B: Something
B->>A: Something
sequenceDiagram
A->>Proxy: Something
Proxy->>B: Something
B->>Proxy: Something
Proxy->>A: Something
钩子类型
按使用范围分类
- 线程钩子
- 监视指定线程的事件消息
- 系统钩子
- 监视所有线程的事件消息
- 如果同一事件同时拥有线程钩子和系统钩子,则先调用线程钩子
- 多个钩子处理过程可以应用在同一事件消息中,最近安装的钩子排在链的开始
按事件分类
- 键盘消息:键盘钩子和低级键盘钩子,
WH_KEYBOARD
- 鼠标消息:鼠标钩子和低级鼠标钩子,
WH_MOUSE
- Shell事件消息:外壳钩子,
WH_SHELL
- 日志钩子可以记录从系统消息队列中取出的各种事件消息
- 窗口过程钩子监视所有从系统消息队列发往目标窗口的消息:
WH_CALLWNDPROC
,WH_CALLWNDPROCRET
,WH_CBT
等
安装钩子:以键盘消息为例
- 这是一个回调函数,每当有挂钩的消息时,就会调用该函数进行处理
wParam
指示了消息是否由当前线程发送,非零值代表消息由当前线程发送lParam
指向了包含该消息详细信息的结构体- 最简单的消息处理函数将直接调用
CallNextHookEx()
,其中什么也没有做