2022年2022年钩子函数 .pdf

上传人:C****o 文档编号:33383677 上传时间:2022-08-10 格式:PDF 页数:17 大小:255.79KB
返回 下载 相关 举报
2022年2022年钩子函数 .pdf_第1页
第1页 / 共17页
2022年2022年钩子函数 .pdf_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《2022年2022年钩子函数 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年钩子函数 .pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、SetWindowsHookEx 函数功能 : 该函数将一个应用程序定义的挂钩处理过程安装到挂钩链中去, 您可以通过安装挂钩处理过程来对系统的某些类型事件进行监控, 这些事件与某个特定的线程或系统中的所有事件相关. 函数原形 : HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId );参数 : idHook: 指示欲被安装的挂钩处理过程之类型, 此参数可以是以下值之一: WH_CALLWNDPROC(4): 安装一个挂钩处理过程, 在系统将消息发送至目标窗口处理过程之前, 对该消息进

2、行监视 , 详情参见CallWndProc 挂钩处理过程. WH_CALLWNDPROCRET(12) :安装一个挂钩处理过程, 它对已被目标窗口处理过程处理过了的消息进行监视, 详情参见 CallWndRetProc 挂钩处理过程. WH_CBT(5) :安装一个挂钩处理过程,接受对 CBT应用程序有用的消息 , 详情参见 CBTProc 挂钩处理过程. WH_DEBUG(9): 安装一个挂钩处理过程以便对其他挂钩处理过程进行调试, 详情参见 DebugProc 挂钩处理过程 . WH_FOREGROUNDIDLE(11):安装一个挂钩处理过程, 该挂钩处理过程当应用程序的前台线程即将进入空

3、闲状态时被调用 , 它有助于在空闲时间内执行低优先级的任务. WH_GETMESSAGE(3):安装一个挂钩处理过程对寄送至消息队列的消息进行监视, 详情参见 GetMsgProc 挂钩处理过程 . WH_JOURNALPLAYBACK(1):安装一个挂钩处理过程, 对此前由WH_JOURNALRECORD 挂钩处理过程纪录的消息进行寄送 . 详情参见 JournalPlaybackProc挂钩处理过程 . WH_JOURNALRECORD(0):安装一个挂钩处理过程, 对寄送至系统消息队列的输入消息进行纪录. 详情参见JournalRecordProc挂钩处理过程. WH_KEYBOARD(

4、2): 安装一个挂钩处理过程对击键消息进行监视. 详情参见 KeyboardProc 挂钩处理过程 . WH_KEYBOARD_LL(13): 此挂钩只能在Windows NT中被安装 , 用来对底层的键盘输入事件进行监视. 详情参见 LowLevelKeyboardProc挂钩处理过程 . WH_MOUSE(7): 安装一个挂钩处理过程, 对鼠标消息进行监视. 详情参见 MouseProc 挂钩处理过程. WH_MOUSE_LL(14): 此挂钩只能在Windows NT 中被安装 , 用来对底层的鼠标输入事件进行监视. 详情参见LowLevelMouseProc 挂钩处理过程. WH_MS

5、GFILTER(-1):安装一个挂钩处理过程, 以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息 . 详情参见MessageProc 挂钩处理过程 . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - WH_SHELL(10):安装一个挂钩处理过程以接受对外壳应用程序有用的通知, 详情参见 ShellProc挂钩处理过程 . WH_SYSMSGFILTER(6): 安装一个挂钩处理过程, 以监视由对话框、消息框、菜

6、单条、或滚动条中的输入事件引发的消息 . 这个挂钩处理过程对系统中所有应用程序的这类消息都进行监视. 详情参见 SysMsgProc挂钩处理过程 . lpfn:指向相应的挂钩处理过程. 若参数 dwThreadId 为 0 或者指示了一个其他进程创建的线程之标识符,则参数 lpfn必须指向一个动态链接中的挂钩处理过程. 否则 , 参数 lpfn 可以指向一个与当前进程相关的代码中定义的挂钩处理过程. hMod:指示了一个动态链接的句柄, 该动态连接库包含了参数lpfn 所指向的挂钩处理过程. 若参数dwThreadId 指示的线程由当前进程创建, 并且相应的挂钩处理过程定义于当前进程相关的代码

7、中, 则参数 hMod必须被设置为NULL(0). dwThreadId: 指示了一个线程标识符,挂钩处理过程与线程相关.若此参数值为0, 则该挂钩处理过程与所有现存的线程相关. 返回值 : 若此函数执行成功, 则返回值就是该挂钩处理过程的句柄; 若此函数执行失败, 则返回值为NULL(0). 若想获得更多错误信息, 请调用 GetLasError函数. 备注 : 若参数 hMod为 NULL,而参数 dwThreadld 为 0或者指示了一个其他进程创建的线程标识符, 则会产生错误 . 对函数 CallNextHookEx进行调用以下链接下一个挂钩处理过程是可选的, 但也是被推荐的否则, 其

8、他安装了此挂钩的应用程序将无法获得此挂钩通知, 从而可能导致错误的行为. 除非您确实希望防止其他应用程序看到此挂钩通知, 您应当调用函数CallNextHookEx. 在终止一个应用程序之前, 必须调用函数UnhookWindowsHookEx以释放与此挂钩相关的系统资源. 挂钩的作用域依赖与挂钩的类型. 一些挂钩只能被设置成系统作用域, 其他挂钩 ( 如下所示 ) 还可以被设置为某一特定线程的作用域: WH_CALLWNDPROC 线程或系统WH_CALLWNDPROCRET 线程或系统WH_CBT 线程或系统WH_DEBUG 线程或系统WH_FOREGROUNDIDLE 线程或系统WH_G

9、ETMESSAGE 线程或系统WH_JOURNALPLAYBACK 系统WH_JOURNALRECORD 系统WH_KEYBOARD 线程或系统WH_KEYBOARD_LL 线程或系统WH_MOUSE 线程或系统WH_MOUSE_LL 线程或系统WH_MSGFILTER 线程或系统WH_SHELL 线程或系统WH_SYSMSGFILTER 系统名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - 对于一个特定的挂钩类型, 现成的挂钩

10、先被调用, 然后才是系统挂钩被调用. 系统挂钩作为共享资源, 安装一次就对所用应用程序产生影响. 所有的系统挂钩函数必须在库中. 系统挂钩应当被限制用于一些特殊用途的应用程序或者用来作为应用程序调试的辅助工具.不再需要挂钩的库应当将相应的挂钩处理过程删除掉. 速查 : Windows NT:3.1 以及以上版本,Windows :95 以及以上版本 ,Windows CE 不支持 , 头文件 winuser.h,库文件 : 用户自定义 ,Unicode, 在 Windows NT 上实现了Unicode 和 ANSI的版本 . ShellProc 函数功能 : 挂钩处理过程是应用程序或库中定义

11、的回调函数, 它与函数 SetWindowsHookEx 搭配使用 . 此函数从系统接受外壳(shell)通知 . 类型 HOOKPROC定义了指向此类回调函数的指针.ShellProc时应用程序或库中定义的相应回调的位置标志符. 函数原形 : LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam,LPARAM lParam ); 参数 : nCode:指示挂钩类型, 该参数可以是以下值之一: HSHELL_ACCESSIBILITYSTATE:对 Windows NT5.0 或以上版本有效, 指示 可访问性 已被改变 . HSHELL_AC

12、TIVATESHELLWINDOW: shell应当激活其主窗口. HSHELL_GETMINRECT: Windows 95 only: 一个窗口正在被最小化或者最大化,系统需要该窗口被最小化时的矩形坐标 . HSHELL_LANGUAGE : Windows 95 only: 键盘语言被改变或者一个新的键盘布局被加载. HSHELL_REDRAW:Windows 95 only: 一个窗口在任务条上的标题已被重画. HSHELL_TASKMAN: Windows 95 only: 用户已选择其任务列表. 一个提供了任务的列表的shell应用程序当返回 TRUE, 以阻止 Windows 开

13、始 ( 执行 ) 其任务列表 . HSHELL_WINDOWACTIVATED: Windows 95 only: 激活状态已被转移给一个不同的顶层无属性主窗口. HSHELL_WINDOWCREATED:一个顶层无属性主窗口已被创建. 当系统调用一个SheProc 函数时 , 该窗口存在. HSHELL_WINDOWDESTROYED:一个顶层无属性主窗口即将销毁. 当系统调用SheProc 函数时 . 该窗口仍然存在. 若 nCode的值小于 0, 则此挂钩处理过程必须将该消息不加处理地传送给函数CallNextHookEx 并返回其返回值 . wParam: 此参数的值依赖于参数nCod

14、e,其依赖关系如下所示: HSHELL_ACCESSIBILITYSTATE: 指示哪一个可以访问特征已被改变了状态, 可以是以下值之一: ACCESS_FILTERKYS,ACCESS_MOUSEKEYS,ACCESS_STICKKEYS. HSHELL_GETMINRECT:被最小化或者最大化的窗口句柄.HSHELL_LANGUAGE: 窗口的句柄 . HSHELL_REDRAW:被重画的窗口的句柄.HSHELL_WINDOWACTIVATED:被激活的窗口的句柄. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整

15、理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - HSHELL_WINDOWCREATED:被创建的窗口的句柄.HSHELL_WINDOWDESTROYED:被销毁的窗口的句柄. lParam: 此参数的值依赖于参数nCode,其依赖关系如下所示: HSHELL_GETMINRECT:指向该 RECT结构的指针 . HSHELL_LANGUAGE: 键盘布局的句柄. HSHELL_REDRAW: 若该窗口正在闪现, 则其值为TRUE,否则为 FALSE. HSHELL_WINDOWACTIVATED:若该窗口是全屏模式, 则其值为 TRUE, 否则为

16、 FALSE.返回值 : 返回值应为0. 备注 : 此挂钩处理过程通过调用函数SetWindowsHookEx , 指定 WH_SHLL 挂钩类型及其相应挂钩处理过程首地址来安装 . 速查 : Windows NT:3.1 以及以上版本,Windows :95 以及以上版本 ,Windows CE 不支持 , 头文件 winuser.h,库文件 , 用户自定义 . SysMsgProc 函数功能 : 挂钩处理过程是应用程序或库中定义的回调函数, 它与函数 SetWindowsHookEx 搭配使用 . 当一个对话框、消息框、菜单条、或滚动条中的输入事件发生,且由此引发的消息尚未被处理之前, 系

17、统对此挂钩处理过程进行调用. 此函数可以对系统中所有的对话框、消息框、菜单条、或滚动条消息进行监视 . 类型 HOOKPROC定义了指向此类回调函数的指针.SysMsgProc 是库中相应回调函数名的位置标志符. 函数原形 : LRESULT CALLBACK SysMsgProc(int nCode,WPARAM wParam,LPARAM lParam); 参数 : nCode:指示产生此消息的输入事件类型. 此参数可以是以下值之一: MSGF_DIALOGBOX:输入事件由一个消息框或者对话框产生. MSGF_MENU:输入事件由一个菜单条产生. MSGF_SCROLLBAR: 输入事件

18、由一个滚动条产生. MSGF_NEXTWINDOW: 输入事件由于用户摁下组合键 以激活另一个窗口而产生. 若 nCode的值小于 0, 则此挂钩处理过程必须将该消息不加处理地传送给函数 CallNextHookEx 并返回其返回值 . wParam: 为 NULL(0). lParam:指向 MSG 结构的 指针 . 返回值 : 若 nCode的值小于 0, 则此挂钩处理过程必须返回CallNextHookEx 的返回值 . 若 nCode的值大于或等于 0, 并且此挂钩处理过程未对该消息进行处理, 则调用函数CallNextHookEx 并返回其返回值是被推荐的 . 否则 , 其他安装了W

19、H_SYSMSGFILTER挂钩的应用程序将无法收到此挂钩通知, 并可能由此导致错误的行为 . 若此挂钩处理过程处理了此消息, 它应返回一个非零值以避免系统再将此消息传送给目标窗口处理过程 . 备注 : 一个应用程序通过调用函数SetWindowsHookEx 指定 WH_SYSMSGFILTER挂钩类型及相应挂钩处理过程首地址来安装此挂钩. 速查 : Windows NT:3.1 以及以上版本,Windows :95 以及以上版本 ,Windows CE 不支持 , 头文件 winuser.h,库文件 , 用户自定义 . 名师资料总结 - - -精品资料欢迎下载 - - - - - - -

20、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - UnhookWindowsHookEx 函数功能 :该函数将一个由SetWindowsHookEx 安装的挂钩处理过程从挂钩链中删除. 函数原形 : BOOL UnhookWindowsHookEx(HHOOK hhk); 参数 : hhk:被删除的挂钩的句柄. 此参数是一个挂钩句柄, 该句柄是此前函数SetWindowsHookEx 的返回值 . 返回值 : 该函数执行成功返回非0 值, 失败返回0. 备注 : 即使 UnhookWindowsH

21、ookEx 函数返回之后, 该钩子处理过程也可能正处于被其它线程调用的状态.若当前未调用该钩子处理过程,则在 UnhookWindowsHookEx 函数返回之前该钩子处理过程被立即删除. DelHookProc:该函数已过时 , 它仅仅是用来与Windows的 16 位版本兼容 .在 32 位 Windows系统中应当使用函数CallNextHookEx. SetWindowsHook:该函数已过时, 它仅仅是用来与Windows的 16 位版本兼容 . 在 32 位 Windows系统中应当使用函数SetWindowsHookEx. UnhookWindowsHook:该函数已过时, 它仅

22、仅是用来与Windows的 16 位版本兼容 . 在 32 位Windows系统中应当使用函数UnhookWindowsHookEx. CallMsgFilter 函数功能 : 该函数将特定消息和挂钩代码发送给与挂钩 WH_SYSMSGFILTER和 WH_MSGFILTER 相联系的挂钩处理过程 , 一个 WH_SYSMSGFILTER 或者 WH_MSGFILTER 挂钩处理过程是指应用程序定义的回调函数,这些回调函数负责检查, 并可有选择地修改关于对话框、消息框、菜单条、滚动条的消息。函数原形: BOOL CallMsgFilter(LPMSG lpMsg, int nCode); 参数

23、:lpMsg:指向一个MSG 结构 , 该结构包含发送给挂钩处理过程的消息. nCode:指定挂钩处理过程需要使用的应用程序定义的代码, 以确定如何对消息进行处理, 该代码切忌采用与系统预定义的与WH_SYSMSGFILTER和 WH_MSGFILTER挂钩相关的挂钩代码(MSGF_ 和 HC_开头 ) 相同的值 . 返回值 : 若该应用程序可对消息作进一步处理, 则返回值为0, 若该应用程序不能对该消息作进一步处理,则返回值为非0 值. 备注 : 系统对 CallMsgFilter进行调用 , 以使得应用程序能够检查和控制在对对话框、消息框、菜单条、名师资料总结 - - -精品资料欢迎下载

24、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - 滚动条的内部处理过程中产生的, 或是由用户按下 组合键以激活不同窗口时产生的消息流. 可通过调用函数SetWindowsHookEx 来安装此挂钩处理过程. 速查 : Windows NT:3.1 以及以上版本 ,Windows :95 以及以上版本,Windows CE 不支持 , 头文件 :winuser.h,库文件 :user32.lib,Unicode:在 Windows NT 上实现了Unicode 和 ANS

25、I的版本 . CallNextHookEx 函数功能 : 该函数发送挂钩信息给当前挂钩链中的下一个挂钩处理过程,一个挂钩处理过程可在对该挂钩信息进行处理之前或之后调用本函数. 函数原形 : LRESULT CallNextHookEx(HHOOK hhk,int nCode,WPARAM wParam,LPARAM lParam); 参数 : hhk: 当前挂钩的句柄. 一个应用程序获得的此句柄是此前SetWindowsHookEx 的调用结果 . nCode:指定发送给当前挂钩处理过程的挂钩代码. 下一个挂钩处理函数使用此代码以决定如何处理该挂钩信息 . wParam:指定发送给当前挂钩处理

26、过程的wParam值, 此参数的含义依赖于与当前挂钩相关的挂钩类型lParam: 指定发送给当前挂钩处理过程的lParam 值, 此参数的含义依赖于与当前挂钩相关的挂钩类型. 返回值 : 其返回值是链中下一个挂钩处理过程的返回值, 当前的挂钩处理过程也必须返回此值, 此返回值的含义依赖与挂钩的类型, 如果希望获得更多的信息, 可参阅关于独立挂钩处理过程的介绍. 备注 : 挂钩处理过程被安置于不同的具有一定挂钩类型的挂钩链中, 函数 CallNextHookEx调用该链中的下一个挂钩 . 对函数 CallNextHookEx 的调用是可选的, 但同时也是被极力推荐使用的, 否则其他安装了挂钩的应

27、用程序将无法收到挂钩通知, 由此可能导致错误的行为. 除非您确实需要使其他应用程序不能此挂钩通知 , 否则 , 您应该调用此函数CallNextHookEx. 速查 : Windows NT:3.1 以及以上版本 ,Windows :95 以及以上版本,Windows CE 不支持 , 头文件 :winuser.h,库文件 :user32.lib. CallWndProc 函数功能 : 该函数挂钩处理过程是由应用程序定义或由库定义的回调函数, 它与函数 SetWindowsHookEx配套使用 , 系统调用此函数无论何时一旦函数 SendMessage 被调用 ,在将消息发送至相应的窗口处理过

28、程之前 , 系统先将该消息发送至挂钩处理过程, 该挂钩处理过程可以对改消息进行检查, 但不能修改之. 类型 HOOKPROC定义了指向此类回调函数的指针,CallWndProc是应用程序定义或库定义的函数名的位置标志位 . 函数原形 : LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam ); 参数 : nCode:指定该挂钩处理过程是否必须对该消息进行处理, 若 nCode 是 HC_ACTION, 则该挂钩处理过程必须处理该消息 . 若 nCode的值小于0, 则此挂钩处理过程必须在未对该消息作进一步处理的情

29、况下, 将其发名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - 送给函数 CallNextHookEx并返回由 CallNextHookEx返回的值 . wParam:指示该消息是否由当前线程发出, 若该消息由当前线程发出, 其值为非0值, 否则 , 其值为 0. lParam: 指向一个CWPSTRUCT结构 , 该结构包含了此消息的详细消息. 返回值 : 若 nCode的值小于 0, 则此挂钩函数必须返回函数CallNext

30、HookEx所返回的值 ;若 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,库文件 : 用户定义 . CallWndRetProc 函数功能 : 该函数挂钩处理过程是在应用程序或库中定义的回调函数, 它与函数 SetWindowsHookEx 搭配使用 , 系统将在调用完 SendMessage 之后调用之 ,该挂钩处理过程可以检查该消息, 但不能修改之. 类型 HOOKPROC

32、定义了一类指针指向此类回调函数,CallWndRetProc 仅仅是在应用程序或库中定义的相应函数名的位置标志符. 函数原形 : LRESULT CALLBACK CallWndRetProc(int nCode,WPARAM wParam,LPARAM lParam); 参数 : nCode:指定该挂钩处理过程是否必须对该消息进行处理, 若 nCode 是 HC_ACTION, 则该挂钩处理过程必须处理该消息 . 若 nCode的值小于0, 则此挂钩处理过程必须不加处理的将其发送给函数CallNextHookEx并返回由 CallNextHookEx返回的值 . wParam:指示该消息是否

33、由当前线程发出, 若该消息由当前线程发出, 其值为非0值, 否则 , 其值为 0. lParam: 指向一个CWPSTRUCT结构 , 该结构包含了此消息的详细消息. 返回值 : 若 nCode的值小于 0, 则此挂钩函数必须返回函数CallNextHookEx所返回的值 ;若 nCode的值大于或等于0, 我们极力推荐对函数CallNextHookEx进行调用 , 并返回其返回值. 否则 , 其他安装了挂钩WM_CALLWNDPROCRET的应用程序将无法收到挂钩通知, 从而导致错误的行为. 若此挂钩处理过程没有调用函数 CallNextHookEx,则返回值为0. 备注 : 一个应用程序通

34、过调用SetWindowsHookEx 时指定 WM_CALLWNDPROCRET挂钩类型及其相应挂钩处名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - 理过程的首地址来安装挂钩处理过程. 速查 : Windows NT:3.1 以及以上版本 ,Windows :95 以及以上版本,Windows CE 不支持 , 头文件 :winuser.h,库文件 : 用户定义 . CBTProc 函数功能 : 该函数挂钩处理过程是在应用程

35、序或库中定义的回调函数, 它与函数 SetWindowsHookEx 配套使用 , 系统在缉获、创建、销毁、最小化、最大化、移动或改变一个窗口尺寸之前调用它; 在结束一个系统命令之前调用它; 在将一个鼠标或键盘事件从系统事件队列中删除之前调用它; 在设置键盘焦点之前调用它 , 或在与系统消息队列进行同步之前调用它, 一个基于计算机培训(CBT)的应用程序使用此挂钩处理过程来从系统接收有用的通知. 类型 HOOKPROC定义了指向此类回调函数的指针,CBTProc 是应用程序定义或库定义的相应回调函数名的位置标识符. 函数原形 : LRESULT CALLBACK CBTProc(int nCo

36、de,WPARAM wParam,LPARAM lParam); 参数 : nCode: 指定一个代码, 该代码被此挂钩处理过程用来决定如何处理此消息, 该参数可以是下值中的一个: HCBT_ACTIVATE: 系统将要激活一个窗口. HCBT_CLICKSKIPPED: 系统已经从系统消息队列中删除了一个鼠标消息, 依据收到的这一挂钩代码, 一个CBT应用程序必须安装一个 WH_JOURNALPLAYBACK 挂钩处理过程以响应此鼠标消息. HCBT_CREATEWND:一个窗口将要被创建, 系统在发送WM_CREATE 或 WM_NCCREATE消息至相应窗口之前调用该挂钩处理过程. 若该

37、挂钩处理过程返回一个非0 值, 则系统销毁该窗口, 函数 CreateWindow 返回值为NULL(0), 但消息 WM_DESTROY不会被发送至相应窗口, 若挂钩处理过程返回为零, 窗口将被正常创建. 当 HCBT_CREATEWND通知发出之时 , 相应窗口已被创建, 但其最终尺寸及位置可能尚未确定, 其父窗口也可能还尚未被创建, 存在这样一种可能, 消息被发送给新被创建的窗口,虽然该窗口尚未接收到WM_NCCREATE 或 WM_CREATE 消息 . 也可能通过对CBT_CREATEWND结构的 hwndInsertAfter域的修改 , 来改变新被创建窗口在Z 序列中的位置. H

38、CBT_DESTROYWND:一个窗口将被销毁. HCBT_KEYSKIPPED:系统已从系统消息队列中删除了一个键盘消息, 依据收到的这个挂钩代码, 一个 CBT应用程序必须安装一个 WH_JOURNALPLAYBACK挂钩处理过程以响应相应的键盘消息. HCBT_MINMAX: 一个窗口将被最小化或最大化. HCBT_MOVESIZE: 一个窗口将被移动或改变尺寸. HCBT_QS: 系统已从系统消息队列中取到一个WM_QUEUESYNC 消息 . HCBT_SETFOCUS: 一个窗口将要获得键盘焦点. HCBT_SYSCOMMAND:一个系统命令将被执行. 这使得一个CBT 应用程序可

39、以避免因热键响应而进行任务切换. 若 nCode的值小于 0, 此挂钩处理过程必须不加处理地将此消息发送给函数CallNextHookEx,并返回函数 CallNextHookEx的返回值 . wParam:取决于参数nCode的值 , 详细信息参见以下的说明部分. lParam: 取决于参数nCode的值 , 详细信息参见以下的说明部分. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - 返回值 : 此挂钩处理过程的返回值决定

40、了系统允许或禁止以下操作之一,对于与以下挂钩代码相应的操作, 返回值为 0 则允许这样的操作, 返回值为1 则禁止 . HCBT_ACTIVATE HCBT_CREATEWNDHCBT_DESTROYWND HCBT_MINMAX HCBT_MOVESIZEHCBT_SETFOCUS HCBT_SYSCOMMAND 对于与以下CBT挂钩代码相对应的操作, 返回值被忽略. HCBT_CLICKSKIPPED HCBT_KEYSKIPPED HCBT_QS 备注 : 除以下挂钩代码之外, 不应当安装WH_JOURNALPLAYBACK挂钩处理过程. 此挂钩处理过程必须放在某个动态链接库中, 一个应

41、用程序通过调用函数 SetWindowsHookEx 指定WH_CBT 挂钩类型与相应挂钩处理过程首地址来安装挂钩处理过程. 以下列示了参数wParam和 lParam 与每一种HCBT挂钩代码的关系. 值参数 wParam 参数 lParam HCBT_ACTIVATE指定将要被激活的窗口句柄.HCBT_CLICKSKIPPED标识鼠标消息从系统消息队列中被删除.HCBT_CREATEWND指定新窗口的句柄. HCBT_DESTROYWND指定将被销毁的窗口句柄.未定义 ,必须设置为0. HCBT_KEYSKIPPED指示虚拟键的代码.HCBT_MINMAX指定被最小化或最大化的窗口句柄HC

42、BT_MOVESIZE 指定将被移动或改变尺寸的窗口句柄.指定一个长指针指向结构CBTACTIVATESTRUCT 的长指针 , 该结构包含了指向激活窗口的句柄, 并指示被激活者是否由于点击而发生改变.指定一个指向结构MOUSEHOOKSTRUCT的长指针 ,该结构包含点击测试代码及鼠标消息发往的窗口 句 柄 .HCBT_ CLICKSKIPPED 值 仅 当 一 个WH_MOUSE 挂 钩 被 安 装 了 之 时 才 发 送 一 个CBTProc 挂钩处理过程, 关于点击测试代码的列表 ,参见 WM_NCHITTEST.指定一个指向 CBT_CREATEWND结构的长指针 , 该结构包含窗口

43、的初始化参数, 这些参数包括窗口的坐标和尺寸 , 通过改变这些参数. 一个 CBTProc挂钩处理过程能够设置窗口的初始尺寸和位置. 指示重复次数 ,扫描码 , 键转义码 , 前驱键状态和上下文代码 .仅当 WH_KEYBOARD挂钩被安装了之时,此HCBT_KEYSKIPPED值被发送 CBTProc 挂钩处理过程. 欲获得更多信息 , 参见 WM_KEYUP 或WM_KEYDOWN 低字 部分指定一个显示窗口的值(SW_), 以指定相应操作 , 详情参见 ShowWindow,高字 部分未定义. 指定一个指向RECT结构的长指针 , 该结构包含窗口的坐标 , 通过改变结构的值,一个 CBT

44、Proc 的子处理过程能够设置窗口的最终位置.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 17 页 - - - - - - - - - HCBT_QS未定义 , 必须设置为 0 未定义 , 必须设置为0HCBT_SETFOCUS 指定获得键盘焦点的窗口句柄. 指示失去键盘焦点的窗口句柄. HCBT_SYSCOMMAND 类型 HOOKPROC定义了一类指针指向此类回调函数,CBTProc 仅仅是在应用程序或库中定义的相应函数名的位置标识符. 速查 : Windows

45、NT:3.1 以及以上版本 ,Windows :95 以及以上版本,Windows CE 不支持 , 头文件 :winuser.h,库文件 : 用户定义 . DebugProc 函数功能 : 该挂钩处理过程是应用程序或库中定义的回调函数, 它与函数SetWindowsHookEx 搭配使用 ,系统在调用与任何挂钩类型和相关的挂钩处理过程之前调用它, 系统传送关于被调用的挂钩的信息给DebugProc 挂钩处理过程, 此挂钩处理过程检查上述信息, 并决定该挂钩是否被调用. 类型 HOOKPROC定义了指向此类回调函数的指针,DebugProc 是应用程序定义或库定义的相应回调函数名的位置标识符.

46、函数原形 : LRESULT CALLBACK DebugProc(int nCode,WPARAM wParam,LPARAM lParam); 参数 : nCode:指示挂钩处理过程是否必须处理此消息. 若 nCode的值是 HC_ACTION, 则挂钩处理过程必须处理此消息 , 若 nCode之值小于 0, 此挂钩处理过程必须将此消息不加处理地传送给函数CallNextHookEx 并返回其返回值 . wParam:指示将被调用的挂钩类型, 此参数可以为以下值: WH_CALLWNDPROC:安装一个监视发送至目标窗口处理过程之的消息的挂钩处理过程, 对该消息进行 , 详情参见 Call

47、WndProc 挂钩处理过程. WH_CALLWNDPROCRET :安装一个挂钩处理过程, 以监视已刚被目标窗口处理过程处理过了的消息, 详情参见 CallWndRetProc 挂钩处理过程. WH_CBT : 安装一个挂钩处理过程, 接受对 CBT应用程序有用的消息 , 详情参见 CBTProc 挂钩处理过程 . WH_DEBUG:安装一个挂钩处理过程以便对其他挂钩处理过程进行调试, 详情参见DebugProc 挂钩处理过程. WH_FOREGROUNDIDLE:安装一个挂钩处理过程, 该挂钩处理过程当应用程序的前台线程即将进入空闲状态指示系统命令的值(SC_) 以标识相应系统命令 , 欲

48、知更多关于系统命令值的信息, 参见WM_SYSCOMMAND. 包含与 WM_SYSCOMMAND消息的 lParam 值相同的数据. 若一个系统菜单命令被鼠标选种, 则低 字 部分包含光标在屏幕坐标系中的X坐标值 , 高字 部分包含 Y坐标值 , 其他情况下 , 此参数未被使用 . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17 页 - - - - - - - - - 时被调用 , 它有助于在空闲时间内执行低优先级的任务. WH_GETMESSAGE:安装一个挂

49、钩处理过程对寄送至消息队列的消息进行监视, 详情参见 GetMsgProc 挂钩处理过程 . WH_JOURNALPLAYBACK:安装一个挂钩处理过程, 对此前由WH_JOURNALRECORD 挂钩处理过程纪录的消息进行寄送 . 详情参见 JournalPlaybackProc挂钩处理过程. WH_JOURNALRECORD:安装一个挂钩处理过程, 对寄送至系统消息队列的输入消息进行纪录. 详情参见JournalRecordProc挂钩处理过程. WH_KEYBOARD:安装一个挂钩处理过程对击键消息进行监视. 详情参见KeyboardProc 挂钩处理过程 . WH_MOUSE:安装一个

50、挂钩处理过程, 对鼠标消息进行监视. 详情参见 MouseProc 挂钩处理过程 . WH_MSGFILTER:安装一个挂钩处理过程, 以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息 . 详情参见 MessageProc 挂钩处理过程 . WH_SHELL: 安装一个挂钩处理过程以接受对外壳应用程序有用的通知, 详情参见 ShellProc挂钩处理过程. WH_SYSMSGFILTER:安装一个挂钩处理过程, 以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息 . 这个挂钩处理过程对系统中所有应用程序的这类消息都进行监视. 详情参见 SysMsgProc 挂钩处理过

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁