书签 分享 收藏 举报 版权申诉 / 29
上传文档赚钱

类型WindowsHook(钩子)函数详解.docx

  • 上传人(卖家):四川天地人教育
  • 文档编号:1527503
  • 上传时间:2021-06-30
  • 格式:DOCX
  • 页数:29
  • 大小:62.62KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《WindowsHook(钩子)函数详解.docx》由用户(四川天地人教育)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    WindowsHook 钩子 函数 详解
    资源描述:

    1、Windows Hook (钩子)函数详解 目录 钩子类型 . 2 WH_MSGFILTER(MessageProc.). 2 WH_JOURNALRECORD(JournalRecordProc) .3. WH_JOURNALPLAYBACK(JournalPlaybackPro.c.). 4 WH_KEYBOARD(KeyboardProc) .6 WH_GETMESSAGE(GetMsgProc) . 8 WH_CALLWNDPROC(CallWndProc) .9 WH_CBT(CBTProc.). 10 WH_SYSMSGFILTER(SysMsgProc) .1. 3 WH_MOU

    2、SE(MouseProc) . 14 WH_DEBUG (DebugProc). 15 WH_SHLL(ShellProc). 16 WH_FOREGROUNDIDLE(ForegroundIdleProc.). 17 WH_CALLWNDPROCRET(CallWndRetProc) .1. 8 WH_KEYBOARD_LL (LowLevelKeyboardProc.). 19 WH_MOUSE_LL (LowLevelMouseProc) . 21 WH_SYSMSGFILTE 和 WH_MSGFILTER (CallMsgFilter).22 相关函数 . 23 SetWindowsH

    3、ookEx . 23 SetWindowsHook . 25 UnhookWindowsHookEx. 26 DelHookProc: . 26 UnhookWindowsHook . 26 CallNextHookEx. 26 钩子类型 WH_MSGFILTER(MessageProc) 函数功能: 挂钩处理过程是应用程序或库中定义的回调函数,它与函数 SetWindowsHookEx 搭配使用.当 一个对话框、消息框、菜单条、或滚动条中的输入事件发生,且由此引发的消息尚未被处理 之前,系统对此挂钩处理过程进行调用 此函数可以对一个特定应用程序或所有应用程序的对 话框、消息框、菜单条、或滚动

    4、引发的条消息进行监视 类型 HOOKPROC 定义了指向此类回调函数的指针.MessageProc 是库中相应回调函数名的位 置标志符 函数原形: LRESULT CALLBACK MessageProc(i nt code,WPARAM wPara m, LPARAM IParam); 参数: nCode: 指示产生此消息的输入事件类型此参数可以是以下值之一: 若 nCode 的值小于 0,则此挂钩处理过程必须将该消息不加处理地传送给函数 CallNextHookEx 并返回其返回值 值MSGF_DDEMGR 当动态数据交换管理库(Dynamic Data Exchange Manageme

    5、nt Library (DDEML)正在等待一个冋 步处理的结束时产生此事件关于DDEML的详情参见Dynamic Data Exchange Management Library . 0MSGF_DIALOGBOX输入事件由一个消息框或者对话框产生 1MSGF_MESSAGEBOX 2MSGF_MENU输入事件由一个菜单条产生 5MSGF_SCROLLBAR:输入事件由一个滚动条产生 6MSGF_NEXTWINDOW输入事件由于用户摁下组合键以激活另一个窗口而产生. 8 MSGF_MAX 4096MSGF_USER wParam: 为 NULL(O). IParam: 指向 MSG 结构的指

    6、针. 返回值: 若 nCode 的值小于 0,则此挂钩处理过程必须返回 CallNextHookEx 的返回值若 nCode 的值大 于或等于 0, 并且此挂钩处理过程未对该消息进行处理,则调用函数 CallNextHookEx 并返回其 返回值是被推荐的 否则,其他安装了 WH_MSGFILTE 港钩的应用程序将无法收到此挂钩通知 并可能由此导致错误的行为 若此挂钩处理过程处理了此消息,它应返回一个非 0 值以避免系 统再将此 消息传送给挂钩链上的其他挂钩处理过程或目标窗口处理过程 备注: 一个应用程序通过调用函数SetWindowsHookEx 指定 WH_MSGFILTEF 挂钩类型和相

    7、应挂钩处 理过程的首地址来安装此挂钩处理过程 若一个应用程序使用了DDEML 并实行同步处理,而且要求必须在消息被分派前处理之,则一 定要使用 WH_MSGFILTEF 挂钩. 速查: Windows NT:3.1 以及以上版本,Windows :95 以及以上版本,Windows CE 不支持,头文 件:winuser.h, 库文件:用户自定义. WH_JOURNALRECORD(JournalRecordProc) 函数功能: 该函数处理过程是应用程序或库定义的回调函数,它与函数 SetWindowsHookEx 搭配使用,此 函数纪录系统从系统消息队列中删除的消息,此后,一个应用程序可以

    8、通过使用挂钩处理过程 JournalPlaybackProc 对此消息进行回调. 类型 HOOKPROC 定义了指向此类回调函数的指针,JournalRecordProc 是应用程序定义或库定 义的相应回调函数名的位置标识符. 函数原形: LRESULT CALLBACK JournalRecordProc(i nt code,WPARAM wParam,LPARAM lParam); 参数: Code: 指示如何处理此消息,此参数可以是以下值之一 HC_ACTION 参数LPARAM指向结构EVENTMSG该结构包含从系统消息队列中删除了的消息的有关 信息,此挂钩处理 过程必须纪录下此结构的

    9、内容,将其拷贝到一个缓冲区或文件中. HC_SYSMODALOFF一个系统的有模式对话框正在被销毁,此挂钩处理过程必须进行纪录. HC_SYSMODALON一个系统的有模式对话框正在被显示,此挂钩处理过程必须停止纪录. 若 nCode 之值小于 0,此挂钩处理过程必须将此消息不加处理地传送给函数CallNextHookEx 并返回其返回值. wParam: 指定为 NULL(0). lParam: 指向结构 EVENTMSG 该, 结构包含将被纪录的消息 . 返回值: 返回值被忽略 . 备注 : 一个 JournalRecordProc 挂钩处理过程必须拷贝但不能修改此消息,在次挂钩处理过程控

    10、制交 还给系统之后 ,此消息继续被处理 . 安 装 一 个 JournalRecordProc 挂 钩 处 理 过 程 是 通 过 调 用 函 数 SetWindowsHookEx 指 定 WH_JOURNALRECORD 挂钩类型和相应挂钩处理过程的首地址来安装此挂钩处理过程过程 并非只能存在于动态链接库中 ,一个应用程序自身也可拥有自己的 JournalRecordProc 挂钩处 理过程 与其余大多数全局挂钩处理过程不同,挂钩处理过程 JournalRecordProc 和 JournalPlaybackProc 总是在设置了该挂钩的线程上下文中被调用一个安装了 JournalRecor

    11、dProc 挂钩处理过程的 应用程序该对虚拟键 VK_CANCEL 进行监视(在大多数键盘上,虚拟键 VK_CANCEL 被实现为组 合键 CTRL+BREAK此虚拟键应被应用程序解释为用户希望终止进行日志纪录的信号而应 用程序对此进行响应,结束相应的纪录序列,并删除挂钩处理过程JournalRecordProc,在这里, 删除挂钩处理过程是很重要的,此举使得应用程序免于因为在一个挂钩处理过程内部被挂起 而将系统锁住 这种作为终止日志纪录信号的角色使得组合键CTRL+BREAK 本身无法被纪录,而组合键 CTRL+C 并不充当日志纪录信号的角色,所以可以被纪录,这里还有两种组合键是不能被纪录

    12、的:即 CTRL+ESC 和CTRL+ALT+DEL 这两组组合键导致系统终止所有的日志活动(纪录或回 调),删除所有的日志挂钩,并将消息 WM_CANCELJOURNAL 寄送给日志应用程序 速查 : Windows NT:3.1 以及以上版本,Windows :95 以及以上版本,Windows CE 不支持,头文 件:winuser.h,库文件:用户定义 WH_JOURNALPLAYBACK(JournalPlaybackProc) 函数功能 : 该函数处理过程是应用程序或库定义的回调函数,它与函数 SetWindowsHookEx 搭配使用 典 型地, 一个应用程序通过调用此函数来对先

    13、前有JournalRecordProc 挂钩处理过程纪录的一系 列鼠标和键盘消息进行回放一旦挂钩函数 JournalPlaybackProc 挂钩处理过程被安装,则通常 的鼠标和键盘输入被禁止 类型 HOOKPROC 定义了指向此类回调函数的指针,JournalPlaybackProc 是应用程序定义或库 定义的相应回调函数名的位置标识符 函数原形: LRESULT CALLBACK JournalPlaybackProc(i nt code, WPARAM wParam, LPARAM lParam); 参数: code: 指示一个代码,被挂钩处理过程用来决定如何处理此消息,这 个 参 数

    14、可 以 是 以 下 值 之 一 HC_GETNEXT挂钩处理过程必须将当前的鼠标或键盘消息拷贝至由参数lParam所指结构EVENTMSG中. HC_NOREMOVE 一个正用wRemoveMsg为参数调用了PeekMessage的应用程序对PM_NOREMOVE标志进行设置,指示此消 息在经过函数PeekMessage的处理之后并不从消息队列中被删除. HC_SKIP 此挂钩处理过程必须准备拷贝下一个鼠标或键盘消息至由参数lParam所指定的结构EVENTMSG中去,依据 收到的代码HC_GETNEXT此挂钩处理过程必须将消息拷贝至结构EVENTMSG中去. HC_SYSMODALOFF一个

    15、的有系统模式对话框已被销毁,此挂钩处理过程必须恢复对此消息的回调 HC_SYSMODALON一个的有系统模式对话框正在被显示,直至此对话矿被销毁之前,此挂钩处理过程必须停止对消息的回调. 若 nCode 的值小于 0,则此挂钩函数必须返回函数CallNextHookEx 所返回的值. wParam: 指示一个 NULL(0)值 IParam: 指向一个 EVENTMSG 结构,该结构反映了正被此挂钩处理函数处理的消息,这个参数仅当参数 nCode 的值是 HC_GETNEXT 寸才有效. 返回值: 为使系统在处理此消息之前先等待一段时间,返回值必须为一个以时钟计的时间量,该时间量 指出了 系统

    16、的等待时间长短.(此时间量可通过计算当前输入的消息与上一个输入消息的time 成员的差别获得),若希望立即处理此消息,返回值应为 0,此返回值仅当挂钩代码为 HC_GETNEXT 寸才 被使用,否则,此返回值被忽略. 备注: 一个 JournalPlaybackProc 挂钩处理过程应当将输入消息拷贝给lParam 参数,此消息必须是在 先前使用 JournalRecordProc 挂钩处理过程时被纪录过的,在使用 JournalRecordProc 挂钩处理 过程时, 不应对此消息进行修改,为了多次获得相同的消息,此挂钩处理过程可以多次以 HC_GETNEX为参数被调用. 若 nCode 的

    17、值为 HC_GETNEX而返回值大于 0,则系统按返回值指定的毫秒值进入睡眠状态, 当系统开始继续执行时,它会以 HC_GETNEXT 为参数 nCode 的值再次调用次挂钩处理过程以 获得相 同的消息,此次调用 JournalPlaybackProc 的返回值为 0,否则,系统又将回到睡眠状态,并 以此次调用 JournalPlaybackProc 返回的毫秒数为睡眠时间,睡眠时间到后再重复上述操作.这 就使得系统表现为被 挂起 与其余大多数全局挂钩处理过程不同,挂钩处理过程 JournalRecordProc 和 JournalPlaybackProc 总是在设置了该挂钩的线程上下文中被调

    18、用 在此挂钩处理过程将控制返回给系统后,此消息继续被处理若 nCode 的值为 HC_SKI 测此挂 钩处理过 程必须准备在它下一次被调用时返回下一个纪录了的事件消息,安装 JournalPlaybackProc 挂钩处理过程通过调用函数 SetWi ndowsHookEx,指定 WH_JOURNALPLAYBAC 挂钩类型及相应挂钩处理过程首地址来实现,如果用在日志回调过程 中按下Ctrl+Esc或Ctrl+Alt+Del组合键,系统将终止回调,取消此日志回调过程,并寄送一个 WM_CANCELJOURNA 消息给日志应用程序 若此挂钩处理过程返回的消息在 WM_KEYFIRST 或 WM_

    19、KEYLAST 的范围内,则以下情形发生 结构 EVENTMSG 的 paramL 成员指示按下的虚拟键编码值 结构 EVENTMSG 的 paramH 成员指 示扫描吗, 这种情况下无法指示出重复按键的次数,这个事件仅表示一个按键事件 速查: Windows NT:3.1 以及以上版本,Windows :95 以及以上版本,Windows CE 不支持,头文 件:winuser.h,库文件:用户定义 WH_KEYBOARD(KeyboardProc) 函数功能: 该函数是应用程序或库文件定义的回调函数,它与函数 SetWindowsHookEx 搭配使用,当应用 程序调 用函数 GetMes

    20、sage 或 PeekMessage 并且当前恰好有一个键盘消息(WM_KEYUP or WM_KEYDOWN) 将要被处理时,系统就调用此挂钩处理过程 类型 HOOKPROC 定义了指向此类回调函数的指针,KeyboardProc 是应用程序定义或库定义的 相应回调函数名的位置标识符 函数原形: LRESULT CALLBACK KeyboardProc(i nt code,LPARAM lParam); 参数: code: 指定一个代码,该代码被挂钩处理过程用于决定如何处理此消息,此 参 数 可 以 为 以 下 值 之 一 HC_ACTION参数wParam和lParam包含一个击键消息的

    21、信息 HC_NOREMOVE 参数wParam and lParam包含一个击键消息的信息,并且此击键消息尚未从消息队列 中被删除(一个应用程序调用函数PeekMessage并设置了PM_NOREMOVE标志). 若 nCode 的值小于 0,则此挂钩函数必须不加处理地传送给函数CallNextHookEx,并返回其返回 值 wParam: 按键的虚拟键值消息,例如 :VK_F1 IParam: 指示重复次数,扫描码,扩展标志,上下文代码,此前的键状态标志和变化状态标志,此参数可以 是以下值的组合值: 0-15位描述:按下键盘次数。 Int16 =lParam 25-28位 保留未用. 第29

    22、位 上下文键:为 1 时:ALT 按下,其他情况为 0 BOOL bAltKeyDow n = lParam 第30位如果是按键按下后发送的消息,30 位为 1,如果是按键抬起后 30 位为 0; BOOL bSe ndKeyDow n = lParam 第31位指定转变状态:31 位为 0 时候,按键正在被按下,为1 时候, 按键正在被释放 BOOL bKeyUp = lParam 欲获得更多关于此 lParam 参数的信息,请参见 Keystroke Message Flags. 返回值: 若 nCode 的值小于 0,则此挂钩函数必须返回函数CallNextHookEx 所返回的值;若

    23、nCode 的值 大于或等于 0,并且此挂钩处理过程并未对此消息进行处理,我们极力推荐对函数 CallNextHookEx进行调用, 并返回其返回值.否则,其他安装了挂钩 WH_KEYBOARD 的应用程序 将无法收到挂钩通知,从而导致错 误的行为.若此挂钩处理过程对此消息进行了处理,它应返 回非 0 值以避免系统将此消息传递给挂钩键上的其他处理过程或目标窗口的处理过程 备注: 一个应用程序通过调用函数SetWindowsHookEx 指定 WH_KEYBOARD 挂钩类型和相应挂钩处 理过程的首地址来安装此挂钩处理过程. 速查: Windows NT:3.1 以及以上版本,Windows :

    24、95 以及以上版本,Windows CE 不支持,头文 件:winuser.h,库文件:用户自定义. WH_GETMESSAGE(GetMsgProc) 函数功能: 该函数处理过程是应用程序或库定义的回调函数,它与函数 SetWindowsHookEx 搭配使用海 当函数 GetMessage 从应用程序的消息队列中获得了一个消息时,系统就调用此函数,在将此 获得的消 息传送给相应窗口处理过程之前,系统将此消息传送给该挂钩处理过程 . 类型 HOOKPROCt义了指向此类回调函数的指针,GetMsgProc 是应用程序定义或库定义的相 应回调函数名的位置标识符 . 函数原形: LRESULT

    25、CALLBACK GetMsgProc(i nt code,WPARAM wPara m,L PARAM lParam ); 参数: Code: 指示挂钩处理过程是否必须处理此消息.若 nCode 的值是 HC_ACTION 则挂钩处理过程必须处 理此消息,若 nCode 之值小于 0,此挂钩处理过程必须将此消息不加处理地传送给函数 CallNextHookEx 并返回其返回值. wParam: 指示此消息是否已从消息队列中被删除,此参数可以是以下值之一 PM_NOREMOVE:指出该消息尚未从消息队列中被删除(一个应用程序调用函数PeekMessage ,设置PM_NOREMOVE标志).

    26、PM_REMOVE指出该消息已从消息队列中被删除.(一个应用程序调用函数GetMessage或PeekMessage,设置PM_REMOVE标志.) IParam: 指向结构 MSG,该结构包含了关于此消息的详细消息 返回值: 若 nCode 的值小于 0,则此挂钩函数必须返回函数 CallNextHookEx 所返回的值;若 nCode 的值 大于或 等于 0,我们极力推荐对函数 CallNextHookEx 进行调用,并返回其返回值.否则,其他安装 了挂钩 WM_GETMESSAG 啲应用程序将无法收到挂钩通知,从而导致错误的行为.若此挂钩处 理过程没有调用 函数 CallNextHook

    27、Ex,则返回值为 0. 备注: 挂钩处理过程 GetMsgProc 可以检查和修改此消息,在此挂钩处理过程将控制返回给系统之后 函数 GetMessage 将此修改后的消息返回给最初调用他的应用程序,应用程序通过调用函数 SetWindowsHookEx 指定 WH_GETMESSAG 事钩类型和相应挂钩处理过程的首地址来安装此 挂钩处理 过程. 速查: Windows NT:3.1 以及以上版本,Windows:95 以及以上版本,Windows CE 不支持,头文 件:winuser.h, 库文件:用户定义. WH_CALLWNDPROC(CallWndProc) 函数功能: 该函数挂钩

    28、处理过程是由应 用程序定义或由 库定义的 回 调函数,它 与函 数 SetWindowsHookEx 配 套使用,系统调用此函数无论何时一旦函数 SendMessage 被调用,在将 消息发送至相应的窗口处理 过程之前,系统先将该消息发送至挂钩处理过程,该挂钩处理过程 可以对改消息进行检查,但不能修改之 . 类型 HOOKPROCt义了指向此类回调函数的指针,CallWndProc 是应用程序定义或库定义 的函数名的位置标志位 . 函数原形: LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam ); 参数: nC

    29、ode: 指定该挂钩处理过程是否必须对该消息进行处理,若 nCode 是 HC_ACTION 则该挂钩处理过 程必须处理该消息 .若 nCode 的值小于 0,则此挂钩处理过程必须在未对该消息作进一步处理 的情况下, 将其发送给函数 CallNextHookEx 并返回由 CallNextHookEx 返回的值. wParam: 指示该消息是否由当前线程发出,若该消息由当前线程发出,其值为非 0 值,否则,其值为 0. IParam: 指向一个 CWPSTRUCT 吉构该结构包含了此消息的详细消息. 返回值: 若 nCode 的值小于 0,则此挂钩函数必须返回函数 CallNextHookEx

    30、 所返回的值;若 nCode 的值 大于或 等于 0,我们极力推荐对函数 CallNextHookEx 进行调用,并返回其返回值.否则,其他安装 了 WM_CALLWNDPROC 挂钩的应用程序将无法收到挂钩通知,从而导致错误的行为.若此挂钩 没有调用 函数 CallNextHookEx,则返回值为 0. 备注: 挂钩处理函数 CallWndPro 可以对消息进行检查,但不能修改之 .在该挂钩处理过程将控制返回 给系统 之后,该消息被发送至相应的窗口过程 . 一个应用程序通过调用SetWindowsHookEx 时指定 WM_CALLWNDPROC 挂钩类型及其相应挂 钩处理过程的首地址来安装

    31、挂钩处理过程 . 挂钩 WM_CALLWNDPROC 是在调用函数 SendMessage 的线程中被调用的,它并非在接受消息 的线程中被调用 速查: Windows NT:3.1 以及以上版本,Windows :95 以及以上版本,Windows CE 不支持,头文 件:winuser.h, 库文件:用户定义 WH_CBT(CBTProc) 函数功能: 该函数挂钩处理过程是在应用程序或库中定义的回调函数,它与函数 SetWindowsHookEx 配 套使用,系统在缉获、创建、销毁、最小化、最大化、移动或改变一个窗口尺寸之前调用它; 在结束一个系统命令之前调用它;在将一个鼠标或键盘事件从系统

    32、事件队列中删除之前调用 它;在设置 键盘焦点之前调用它,或在与系统消息队列进行同步之前调用它,一个基于计算机 培训(CBT 的应用程序使用此挂钩处理过程来从系统接收有用的通知 类型 HOOKPROCt义了指向此类回调函数的指针,CBTProc 是应用程序定义或库定义的相 应回调函数名的位置标识符 函数原形: LRESULT CALLBACK CBTProc(i nt n Code,WPARAM wPara m,LPARAM lParam); 参数: nCode: 指定一个代码,该代码被此挂钩处理过程用来决定如何处理此消息,该参数可以是下值中的一 个: HCBT_ACTIVATE:系统将要激活一

    33、个窗口 HCBT_CLICKSKIPPED: 系统已经从系统消息队列中删除了一个鼠标消息,依据收到的这一挂钩代码,一个CBT应用程序必须安装一个 WH_JOURNALPLAYBACK挂钩处理过程以响应此鼠标消息 HCBT_CREATEWND: 一个窗口将要被创建,系统在发送WM_CREATE或WM_NCCREATE消息至相应窗口之前调用该挂钩处理过程.若 该挂钩处理过程返回一个非0值,则系统销毁该窗口,函数CreateWindow返回值为NULL(0)但消息WM_DESTROY不会被发送 至相应窗口,若挂钩处理过程返回为零,窗口将被正常创建 当HCBT_CREATEWND通知发出之时,相应窗口

    34、已被创建,但其最终尺寸及位置可能尚未确定,其父窗口也可能还 尚未被创建,存在这样一种可能,消息被发送给新被创建的窗口,虽然该窗口尚未接收到WM_NCCREATE或 WM_CREATE消息.也可能通过对CBT_CREATEWND结构的hwndInsertAfter域的修改,来改变新被创建窗口在Z 序列中的位置 HCBT_DESTROYWND一个窗口将被销毁 HCBT_KEYSKIPPED系统已从系统消息队列中删除了一个键盘消息,依据收到的这个挂钩代码,一个CBT应用程序必须安装一个 WH_JOURNALPLAYBACI挂钩处理过程以响应相应的键盘消息 HCBT_MINMAX一个窗口将被最小化或最

    35、大化 HCBT_MOVESIZE一个窗口将被移动或改变尺寸 HCBT_QS系统已从系统消息队列中取到一个WM_QUEUESYNC消息. HCBT_SETFOCUS一个窗口将要获得键盘焦点. HCBT_SYSCOMMAND一个系统命令将被执行.这使得一个CBT应用程序可以避免因热键响应而进行任务切换 若 nCode 的值小于 0,此挂钩处理过程必须不加处理地将此消息发送给函数CallNextHookEx, 并返回函数 CallNextHookEx 的返回值. wParam: 取决于参数 nCode 的值,详细信息参见以下的说明部分 . IParam: 取决于参数 nCode 的值,详细信息参见以

    36、下的说明部分 . 返回值: 此挂钩处理过程的返回值决定了系统允许或禁止以下操作之一,对于与以下挂钩代码相应的 操作,返回值为 0 则允许这样的操作,返回值为 1 则禁止. HCBT_ACTIVATE HCBT_CREATEWNDHCBT_DESTROYWND HCBT_MINMAX HCBT_MOVESIZEHCBT_SETFOCUS HCBT_SYSCOMMAND 对于与以下 CBT 挂钩代码相对应的操作,返回值被忽略. HCBT_CLICKSKIPPED HCBT_KEYSKIPPED HCBT_QS 备注: 除以下挂钩代码之外,不应当安装 WH_JOURNALPLAYBAC 挂钩处理过程

    37、. 此挂钩处理过程必须放在某个动态链接库中,一个应用程序通过调用函数 SetWindowsHookEx 指定 WH_CBT 挂钩类型与相应挂钩处理过程首地址来安装挂钩处理过 程. 以下列示了参数 wParam 和 lParam 与每一种 HCBT 挂钩代码的关系. HCBT_ACTIVATE wParam :指定被激活窗口句柄。 lParam:指定一个指向 CBTACTIVATESTRUC 吉构体,包含激活窗口的句柄和指定窗口是否由 于鼠标点 击激活状态被改变。 HCBT_CLICKSKIPPED wParam:指定从系统消息队列中取出的鼠标消息。 lParam:指定一个指向 MOUSEHOO

    38、KSTRUC 结构体,包含点击测试标示和鼠标消息所属的窗 口句柄。HCBT_CLICKSKIPPE 被发送到 CBTProcW子函数只有当 WM_HOUSE 钩子被安装,更 多点 击测试标示请查看 WM_NCHITTEST。 HCBT_CREATEWND wParam:指定新窗口的句柄。 lParam:指定一个指向 CBT_CREATEWN 结构体,包含了窗口初始化参数。这个参数包含的 窗口的坐标 和尺寸。 通过改变这些参数, 一个 CBTProc 钩子程序可以设置窗口的初始大小和 HCBT_DESTROYWND wParam:指定被销毁的窗口句柄。 lParam :未定义,必须为 0。 HC

    39、BT_KEYSKIPPED wParam :指定虚拟键码。 lParam:指定重复次数、扫描码、过渡键码、先前的关键状态和环境标示。HCBT_KEYSKIPPED 被发送到 CBTProcW子程序,仅当 WH_KEYBOARD 勾子被安装。查看更多信息请看 WM_KEYUP 或 WM_KEYDOWN。 HCBT_MINMAX wParam :指定被最大化或最小化的窗口句柄。 lParam:在低 16 位中指定了显示窗口标示,查看更多请看ShowWindows。高 16 位未定 义。 HCBT_MOVESIZE wParam :指定被移动,尺寸发生变化的窗口句柄。 lParam:指向一个 REC

    40、T 结构体,包含窗口坐标。通过改变这个值,一个CBTProc 钩子程序 可以设置最终窗口的坐标。 HCBT_QS wParam :未定义,必须为 0. lParam :未定义,必须为 0. HCBT_SETFOCUS wParam:指定获得按键焦点的窗口句柄 lParam:指定了失去按键焦点的窗口句柄 HCBT_SYSCOMMAND wParam :指定一个系统命令值。更多信息请查看WM_SYSCOMMAND. lParam:包含相同数据作为 lParam 值得 WM_SYSCOMMAND 消息;如果一个系统菜单被鼠标 选择,低 16 位指定鼠标的 x 坐标,高 16 位指定鼠标的 y 坐标,

    41、否则参数不被使用 速查: Windows NT:3.1 以及以上版本,Windows :95 以及以上版本,Windows CE 不支持,头文 件:winuser.h,库文件:用户定义 WH_SYSMSGFITER(SysMsgProc) 函数功能: 挂钩处理过程是应用程序或库中定义的回调函数,它与函数 SetWindowsHookEx 搭配使用当 一个对话框、消息框、菜单条、或滚动条中的输入事件发生,且由此引发的消息尚未被处理 之前,系统对此挂钩处理过程进行调用此函数可以对系统中所有的对话框、消息框、菜单条、 或滚动条消息进行监视 类型 HOOKPROC义了指向此类回调函数的指针SysMsg

    42、Proc 是库中相应回调函数名的位置 标志符 函数原形: LRESULT CALLBACK SysMsgProc(i nt n Code,WPARAM wPara m,LPARAM lParam); 参数: nCode:指示产生此消息的输入事件类型此参数可以是以下值之一 MSGF_DIALOGBOX输入事件由一个消息框或者对话框产生 MSGF_MENU输入事件由一个菜单条产生 MSGF_SCROLLBAR输入事件由一个滚动条产生 MSGF_NEXTWINDOW输入事件由于用户摁下组合键以激活另一个窗口而产生 若 nCode 的值小于 0,则此挂钩处理过程必须将该消息不加处理地传送给函数 Cal

    43、lNextHookEx 并返回其返回值 wParam: 为 NULL(0) IParam: 指向 MSG 结构的指针 返回值: 若 nCode 的值小于 0,则此挂钩处理过程必须返回CallNextHookEx 的返回值若 nCode 的值大 于或等于 0,并且此挂钩处理过程未对该消息进行处理,则调用函数 CallNextHookEx 并返回其 返回值是被推荐的否则,其他安装了 WH_SYSMSGFILTE 挂钩的应用程序将无法收到此挂钩 通知,并 可能由此导致错误的行为若此挂钩处理过程处理了此消息,它应返回一个非零值以 避免系统再将此消息传送给目标窗口处理过程 备注: 一个应用程序通过调用函

    44、数SetWindowsHookEx 指定 WH_SYSMSGFILTE 挂钩类型及相应挂 钩处理过程首地址来安装此挂钩 速查: Windows NT:3.1 以及以上版本,Windows :95 以及以上版本,Windows CE 不支持,头文件 winuserh, 库文件,用户自定义 WH_MOUSE(MouseProc) 函数功能: 该函数是应用程序或库文件定义的回调函数,它与函数 SetWindowsHookEx 搭配使用,当应用 程序调 用函数 GetMessage 或 PeekMessage 并且当前恰好有一个鼠标消息将要被处理时,系 统就调用此挂钩 处理过程. 类型 HOOKPRO

    45、C 定义了指向此类回调函数的指针,MouseProc 是应用程序定义或库定义的相 应回调函数名的位置标识符 . 函数原形: LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lParam); 参数: nCode: 指示一个代码被挂钩处理过程用于决定如何处理此消息,此 参 数 可 以 是 以 下 值 之 一 HC_ACTION指示参数wParam和lParam包含了关于鼠标消息的信息 HC_NOREMOVE 指示参数wParam和lParam中包含了关于鼠标的信息,而且此鼠标消息尚未从消息队列中被删除(一个应用程序调用函 数

    46、PeekMessage并设置了PM_NOREMOVE标志). 若 nCode 的值小于 0,则此挂钩函数必须不加处理地传送给函数CallNextHookEx,并返回其返回 值. wParam: 指示鼠标消息的标识符, lParam: 指向 MOUSEHOOKSTRUCT 吉构的指针. 返回值: 若 nCode 的值小于 0,则此挂钩函数必须返回函数CallNextHookEx 所返回的值;若 nCode 的值 大于或等于 0,并且此挂钩处理过程尚未对此消息进行处理,我们极力推荐对函数 CallNextHookEx进行调用, 并返回其返回值.否则,其他安装了挂钩 WH_MOUSE 的应用程序将

    47、无法收到挂钩通知,从而导致错误 的行为.若此挂钩处理过程对此消息进行了处理,它应返回 非 0 值以避免系统将此消息传递给目标窗口的处理过程 备注: 一个应用程序通过调用函数SetWindowsHookEx 指定 WH_MOUSE 挂钩类型和相应挂钩处理 过程的首地址来安装此挂钩处理过程.此挂钩处理过程一定不能安装JournalPlaybackProc 回 调函数. 速查: Windows NT:3.1 以及以上版本,Windows :95 以及以上版本,Windows CE 不支持,头文 件:winuser.h,库文件:用户自定义. WH_DEBUG(DebugProc) 函数功能: 该挂钩处

    48、理过程是应用程序或库中定义的回调函数,它与函数 SetWindowsHookEx 搭配使用, 系统在调用与任何挂钩类型和相关的挂钩处理过程之前调用它,系统传送关于被调用的挂钩 的信息给 DebugProc 挂钩处理过程,此挂钩处理过程检查上述信息,并决定该挂钩是否被调用. 类型 HOOKPROC 定义了指向此类回调函数的指针,DebugProc 是应用程序定义或库定义的 相应回调函数名的位置标识符 . 函数原形: LRESULT CALLBACK DebugProc(i nt n Code,WPARAM wPara m, LPARAM lParam); 参数: nCode: 指示挂钩处理过程是

    49、否必须处理此消息.若 nCode 的值是 HC_ACTION 则挂钩处理过程必须处 理此消息,若 nCode 之值小于 0,此挂钩处理过程必须将此消息不加处理地传送给函数 CallNextHookEx 并返回其返回值. wParam: 指示将被调用的挂钩类型,此参数可以为以下值 WH_CALLWNDPROC 安装一个监视发送至目标窗口处理过程之的消息的挂钩处理过程,对该消息进行,详情参见CallWndProc挂 钩处理过程. WH_CALLWNDPROCRET 安装一个挂钩处理过程,以监视已刚被目标窗口处理过程处理过了的消息,详情参见CallWndRetProc挂钩 处理过程. WH_CBT安

    50、装一个挂钩处理过程,接受对CBT应用程序有用的消息,详情参见CBTProc挂钩处理过程. WH_DEBUG安装一个挂钩处理过程以便对其他挂钩处理过程进行调试,详情参见DebugProc挂钩处理过程. WH_FOREGROUNDIDLE 安装一个挂钩处理过程,该挂钩处理过程当应用程序的前台线程即将进入空闲状态时被调用,它有助于在空 闲时间内执行低优先级的任务. WH_GETMESSAGE安装一个挂钩处理过程对寄送至消息队列的消息进行监视,详情参见GetMsgProc挂钩处理过程. WH_JOURNALPLAYBACK 安装一个挂钩处理过程,对此前由WH_JOURNALRECORD挂钩处理过程纪录

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:WindowsHook(钩子)函数详解.docx
    链接地址:https://www.163wenku.com/p-1527503.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库