2022年2022年钩子函数的使用[汇 .pdf
《2022年2022年钩子函数的使用[汇 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年钩子函数的使用[汇 .pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微软的 windowsX 操作系 统是建立在事件 驱动 的机制上的,也就是通过消息 传递 来实现 。而钩子在 windows 操作系 统中,是一 种能在事件(比如:消息、鼠标激活、 键盘响应)到达 应用程序前中途接获事件的机制。而且,钩子函数 还可以通 过修改、 丢弃等手段来 对事件起作用。Windows 有两种钩 子,一种是特定 线程钩子( Thread specific hooks),一 种是全局系 统钩子(Systemwide hooks)。特定线程 钩子只是 监视 指定的 线程,而全局系 统钩子则可以监视 系统中所有的 线程。无论 是特定 线程钩 子, 还是全局系 统钩 子,都是通 过
2、 SetWindowsHookEx ()来设置钩子的。对于特定 线程钩子,钩子的函数既可以是包含在一个.exe 也可以是一个 .dll。但是对于一个全局系 统钩 子,钩子函数必 须包含在独立的dll 中,因此,当我们要捕捉 键盘 响应时 ,我们必须创 建一个 动态链 接 库。但是当钩子函数在得到了控制权,并对相关的事件 处理完后,如果想要 该消息得以 继续 的 传递 ,那 么则 必须调 用另一个函数: CallNextHookEx。由于系统必须对每 个消息 处理,钩子程序因此增加了处理的 负担,因此也降低了系统的性能。鉴 于这一点,在 windows ce中对钩 子程序并不支持。所以当程序完成
3、并退出时, 应当释放钩子,调用函数:UnhookWindowsHookEx。下面我 们将举一个例子(捕捉 键盘 )来 详细 的讲解钩子函数的程序设计 。I:设置 钩子设置钩子是通 过 SetWindowsHookEx ()的 API 函数 . 原形: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - -
4、 - dwThreadId) idhook: 装入 钩子的 类型 . lpfn: 钩子 进程的入口地址hMod: 应用程序的事件句柄dwThreadId: 装入 钩子的 线程 标示参数:idHook: 这个参数可以是以下值:WH_CALLWNDPROC、WH_CALLWNDPROCRET、 WH_CBT 、WH_DEBUG 、WH_FOREGROUNDIDLE、 WH_GETMESSAGE、 WH_JOURNALPLAYBACK、WH_JOURNALRECORD、 WH_KEYBOARD、 WH_KEYBOARD_LL、 WH_MOUSE 、WH_MOUSE_LL、 WH_MSGFILTER、
5、 WH_SHELL 、 WH_SYSMSGFILTER。对于这些参数,我不想一一加以解释,因为 MSDN 中有 关于他们的详细注解。我只挑 选其中的几个加以中文 说明。WH_KEYBOARD:一旦有键盘 敲打消息(键盘 的按下、键盘 的弹起),在 这个消息被放在 应用程序的消息 队列前,WINDOWS将会 调用你的 钩子函数。钩子函数可以改变和丢弃键盘敲打消息。WH_MOUSE : 每 个鼠 标 消息在被放在应用程序的消息 队列前,WINDOWS将会调用你的 钩子函数。钩子函数可以改变和丢弃鼠 标消息。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
6、 - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - WH_GETMESSAGE: 每 次当你的 应用程序 调用一个 GetMessage()或者一个PeekMessage()为了去从 应 用程序的消息 队 列中要求一个消息时,WINDOWS都会调用你的钩子函数。而 钩子函数可以改 变和 丢弃这个消息。II:释放钩子钩子的 释放使用的是UnhookWindowsHookEx()函数原形: BOOL UnhookWindowsHookEx( HHOOK hhk ) UnhookWindowsHookEx()函数将 释放的是
7、钩 子链中函数 SetWindowsHookEx所装入的 钩子进程。hhk: 将要 释放的 钩子进程的句柄。III: 钩子 进程钩子 进程使用函数HookProc; 其实 HookProc 仅仅只是 应用程序定 义的符号。比如你可以写成 KeyBoardHook.但是参数是不变的。Win32 API提供了 诸如: CallWndProc、 GetMsgProc 、DebugProc 、 CBTProc 、 MouseProc 、 KeyboardProc、 MessageProc等函数,对于他 们的详细讲解,可以看 MSDN 我在此只 讲解一下 KeyBoardHook的含义。原形:LRESU
8、LT CALLBACK KeyBoardHook (int nCode, WPARAM wParam, LPARAM lParam) 说明: 钩子进程是一些依附在一个钩 子上的一些函数,因此钩子进程只被 WINDOWS 调用而不被应用程序 调用,他们有时就需要作 为一个回 调函数(CALLBACK )。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - 参数 说明:nCode: 钩子代码 , 钩子 进程使用 钩子代 码去决定是否
9、执行。而钩子代码的值是依靠 钩子的种类 来定的。每种钩 子种类 都有他 们自己一系列特性的代码。比如对于 WH_KEYBOARD, 钩子代 码的参数有:HC_ACTION , HC_NOREMOVE。 HC_ACTION的意 义:参数wParam 和lParam 包含了 键盘 敲打消息的信息, HC_NOREMOVE的意 义:参数wParam 和 lParam 包含了键盘 敲打消息的信息,并且, 键盘 敲打消息一直没有从消息队列中 删除。(应用程序 调用PeekMessage函数,并且 设置 PM_NOREMOVE标志)。也就是说当 nCode 等于 HC_ACTION时, 钩子进程必 须处
10、理消息。而 为 HC_NOREMOVE时, 钩子进程必 须传递 消息给CallNextHookEx函数,而不能做 进一步的处 理,而且必 须有 CallNextHookEx函数的返回 值。wParam: 键盘 敲打所 产生的 键盘 消息,键盘 按键的虚 拟代码。lParam: 包含了消息 细节 。注意 :如果 钩子进 程中 nCode 小于零,钩子进 程必须返回(return) CallNextHookEx(nCode,wParam,lParam);而钩子进程中的 nCode 大于零,但是 钩子进程并不 处理消息,作者推荐你 调 用 CallNextHookEx并且返回 该函数的返回 值。否则
11、,如果另一个 应用程序也装入WH_KEYBOARD 钩子,那么该钩 子将不接受 钩子通知并且返回一个不正确的 值。如果钩 子进程处理了消息,它可能返回一个非零值去阻止系 统传递该 信息到其它剩下的 钩子或者 windows 进程。所以最好在 钩 子进程的最后都返回CallNextHookEx的返回值。IV:调用下一个 钩子函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - 调用下一个 钩子函数 时使用 CallNexHookE
12、x函数。原形:LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam ) CallNexHookEx()函数用于 对当前 钩子链中的下一个 钩子进程传递钩 子信息,一个 钩子进程既可以在 钩子信息 处理前,也可以在 钩子信息 处理后 调用该函数。为什么使用 该函数已在iii 钩子进程中的 “ 注意 ” 中,加以了 详细 的说明。hhk: 当前 钩子的句柄nCode: 传送到 钩子 进程的 钩子代 码。wParam: 传送到 钩子进程的 值 。lParam: 传送到 钩子进程的 值。参数:hhk: 当前
13、 钩子的句柄 . 应用程序接受 这个句柄,作 为先前 调用 SetWindowsHookE函数的 结果nCode: 传送到 钩子 进程的 钩子代 码,下一个钩子进程使用 这个代 码以此决定如何 处理钩子信息wParam: 传送给钩 子进程的 wParam 参数 值 ,参数值的具体含 义与当前 钩子链的挂接的 钩子类型有 关lParam : 传送给钩 子进程的 wParam 参数 值 ,参数值的具体含 义与当前 钩子链的挂接的 钩子类型有 关名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
14、第 5 页,共 12 页 - - - - - - - - - 返回 值:返回值是链 中下一个 钩子进 程返回的 值,当前钩子进程必 须返回 这个值,返回值的具体含 义与挂接的 钩子类型有 关, 详细 信息 请参看具体的 钩子进程描述。V 建立一个 动态连 接库( DLL )当我 们熟悉了以上的各个函数后,现在我 们开 始编写一个 动态连 接库( DLL )。在 这儿我采用的是 WIN32 DLL, 而不是 MFC DLL 。而且以下所有的程序也都是采用C 语言去 编写。这主要是因为使用 WIN32 API 能够 更详细 、更全面的控制程序的如何执行,而使用 MFC ,一些低级的控制是不可能 实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年钩子函数的使用汇 2022 钩子 函数 使用
限制150内