《C语言第24讲钩子函数》由会员分享,可在线阅读,更多相关《C语言第24讲钩子函数(2页珍藏版)》请在金锄头文库上搜索。
1、动力小刚 QQ84066652第 24 讲 钩子函数目前对钩子的理解:譬如我们用鼠标在某个窗口上双击了一次, 或者给某个窗口输入了一个字母 A; 首先发现这些事件的不是窗口, 而是系统!然后系统告诉窗口: 喂! 你让人点了, 并且是连续点了两鼠标, 你准备怎么办? 或者是系统告诉窗口: 喂! 有人向你家里扔砖头了, 不信你看看, 那块砖头是 A. 这时窗口的对有些事件会忽略、对有些事件会做出反应:譬如, 可能对鼠标单击事件忽略, 窗口想: 你单击我不要紧, 累死你我不负责; 但一旦谁要双击我, 我会马上行动, 给你点颜色瞧瞧!这里窗口准备要采取的行动, 就是我们提前写好的事件.用 Window
2、s 的话说, 窗口的事件就是系统发送给窗口的消息; 窗口要采取的行动(事件代码)就是窗口的回调函数.但是! 往往隔墙有耳. 系统要通知给窗口的 话( 消息), 可能会被另一个家伙(譬如是一个贼)提前听到!有可能这个贼就是专门在这等情报的, 贼知道后, 往往在窗口知道以前就采取了行动!并且这个贼对不同的消息会采取不同的行动方案, 它的行动方案一般也是早就准备好的;当然这个贼也不是对什么消息都感兴趣, 对不感兴趣的消息也就无须制定相应的行动方案.总结: 这个贼 就是我们要设置的钩子; 贼的 行动方案 就是钩子函数, 或者叫钩子的回调函数. _动力小刚 QQ84066652钩子分两种, 一种是系统级的全局钩子; 一种是线程级的钩子.全局钩子函数需要定义在 DLL 中, 从线程级的钩子开始比较简单.其实钩子函数就三个: 设置钩子: SetWindowsHookEx释放钩子: UnhookWindowsHookEx继续钩子: CallNextHookEx在线程级的钩子中经常用到 GetCurrentThreadID 函数来获取当前线程的 ID.下面例子中设定了一个线程级的键盘钩子, 专门拦截字母 A.