WinAPI——钩子函数大全3

函数原形:LRESULT CALLBACK JournalPlaybackProc(int code, WPARAM wParam, LPARAM lParam);

 

参数:

code:指示一个代码,被挂钩处理过程用来决定如何处理此消息,这个参数可以是以下值之一:

HC_GETNEXT 挂钩处理过程必须将当前的鼠标或键盘消息拷贝至由参数lParam 所指结构EVENTMSG中.HC_NOREMOVE 一个正用wRemoveMsg为参数调用了 PeekMessage的应用程序对PM_NOREMOVE标志进行设置,指示此消息在经过函数PeekMessage的处理之后,并不从消息队列中被删除.

HC_SKIP此挂钩处理过程必须准备拷贝下一个鼠标或键盘消息至由参数lParam 所指定的结构EVENTMSG 中去,依据收到的代码HC_GETNEXT ,此挂钩处理过程必须将消息拷贝至结构EVENTMSG 中去. HC_SYSMODALOFF  一个的有系统模式对话框已被销毁,此挂钩处理过程必须恢复对此消息的回调.

HC_SYSMODALON 一个的有系统模式对话框正在被显示,直至此对话矿被销毁之前,此挂钩处理过程必须停止对消息的回调.

若nCode的值小于0,则此挂钩函数必须返回函数CallNextHookEx所返回的值.

 

wParam:指示一个NULL(0)值

 

lParam:指向一个EVENTMSG结构,该结构反映了正被此挂钩处理函数处理的消息,这个参数仅当参数nCode的值是HC_GETNEXT时才有效.

 

返回值:为使系统在处理此消息之前先等待一段时间,返回值必须为一个以时钟计的时间量,该时间量指出了系统的等待时间长短.(此时间量可通过计算当前输入的消息与上一个输入消息的time成员的差别获得),若希望立即处理此消息,返回值应为0,此返回值仅当挂钩代码为HC_GETNEXT时才被使用,否则,此返回值被忽略.

备注:一个JournalPlaybackProc挂钩处理过程应当将输入消息拷贝给lParam参数,此消息必须是在先前使用JournalRecordProc 挂钩处理过程时被纪录过的,在使用JournalRecordProc挂钩处理过程时,不应对此消息进行修改,为了多次获得相同的消息,此挂钩处理过程可以多次以HC_GETNEXT为参数被调用.

若nCode的值为HC_GETNEXT而返回值大于0,则系统按返回值指定的毫秒值进入睡眠状态,当系统开始继续执行时,它会以HC_GETNEXT为参数nCode的值再次调用次挂钩处理过程以获得相同的消息,此次调用JournalPlaybackProc的返回值为0,否则,系统又将回到睡眠状态,并以此次调用JournalPlaybackProc返回的毫秒数为睡眠时间,睡眠时间到后再重复上述操作.这就使得系统表现为被挂起.

与其余大多数全局挂钩处理过程不同,挂钩处理过程JournalRecordProc和JournalPlaybackProc总是在设置了该挂钩的线程上下文中被调用.

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

若此挂钩处理过程返回的消息在WM_KEYFIRST 或WM_KEYLAST的范围内,则以下情形发生.

结构EVENTMSG的paramL成员指示按下的虚拟键编码值,结构EVENTMSG的paramH成员指示扫描吗,这种情况下无法指示出重复按键的次数,这个事件仅表示一个按键事件.

 

速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户定义.

 

JournalRecordProc

 函数功能: 该函数处理过程是应用程序或库定义的回调函数, 它与函数SetWindowsHookEx搭配使用,此函数纪录系统从系统消息队列中删除的消息,此后,一个应用程序可以通过使用挂钩处理过程JournalPlaybackProc对此消息进行回调.

类型HOOKPROC定义了指向此类回调函数的指针, JournalRecordProc是应用程序定义或库定义的相应回调函数名的位置标识符.

 

函数原形:LRESULT CALLBACK JournalRecordProc(int code,WPARAM wParam,LPARAM lParam);

 

参数:

Code:指示如何处理此消息,此参数可以是以下值之一:

HC_ACTION: 参数LPARAM指向结构 EVENTMSG ,该结构包含从系统消息队列中删除了的消息的有关信息,此挂钩处理过程必须纪录下此结构的内容,将其拷贝到一个缓冲区或文件中.

HC_SYSMODALOFF:   一个系统的有模式对话框正在被销毁,此挂钩处理过程必须进行纪录.

HC_SYSMODALON:一个系统的有模式对话框正在被显示,此挂钩处理过程必须停止纪录.

若nCode之值小于0,此挂钩处理过程必须将此消息不加处理地传送给函数CallNextHookEx并返回其返回值.

wParam:指定为NULL(0).

 

lParam:指向结构EVENTMSG ,该结构包含将被纪录的消息.

 

返回值:返回值被忽略.

 

备注:一个JournalRecordProc挂钩处理过程必须拷贝但不能修改此消息,在次挂钩处理过程控制交还给系统之后,此消息继续被处理.

安装一个JournalRecordProc挂钩处理过程是通过调用函数SetWindowsHookEx指定WH_JOURNALRECORD挂钩类型和相应挂钩处理过程的首地址来安装此挂钩处理过程.过程并非只能存在于动态链接库中,一个应用程序自身也可拥有自己的JournalRecordProc挂钩处理过程.

与其余大多数全局挂钩处理过程不同,挂钩处理过程JournalRecordProc和JournalPlaybackProc总是在设置了该挂钩的线程上下文中被调用.一个安装了JournalRecordProc挂钩处理过程的应用程序该对虚拟键VK_CANCEL进行监视(在大多数键盘上,虚拟键VK_CANCEL被实现为组合键< CTRL+BREAK>),此虚拟键应被应用程序解释为用户希望终止进行日志纪录的信号,而应用程序对此进行响应,结束相应的纪录序列,并删除挂钩处理过程JournalRecordProc,在这里,删除挂钩处理过程是很重要的,此举使得应用程序免于因为在一个挂钩处理过程内部被挂起而将系统锁住.

这种作为终止日志纪录信号的角色使得组合键<CTRL+BREAK>本身无法被纪录,而组合键<CTRL+C>并不充当日志纪录信号的角色,所以可以被纪录,这里还有两种组合键是不能被纪录的:即<CTRL+ESC> 和<CTRL+ALT+DEL>,这两组组合键导致系统终止所有的日志活动(纪录或回调),删除所有的日志挂钩,并将消息WM_CANCELJOURNAL寄送给日志应用程序.

 

速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户定义

 

KeyboardProc

函数功能:该函数是应用程序或库文件定义的回调函数, 它与函数SetWindowsHookEx搭配使用,当应用程序调用函数 GetMessage 或PeekMessage 并且当前恰好有一个键盘消息 (WM_KEYUP or WM_KEYDOWN) 将要被处理时,系统就调用此挂钩处理过程.

类型HOOKPROC定义了指向此类回调函数的指针, KeyboardProc是应用程序定义或库定义的相应回调函数名的位置标识符.

 

函数原形:LRESULT CALLBACK KeyboardProc(int code,LPARAM lParam);

 

参数:

code:指定一个代码,该代码被挂钩处理过程用于决定如何处理此消息,此参数可以为以下值之一:

HC_ACTION  参数 wParam 和 lParam包含一个击键消息的信息.

HC_NOREMOVE   参数wParam and lParam包含一个击键消息的信息,并且此击键消息尚未从消息队列中被删除(一个应用程序调用函数PeekMessage 并设置了PM_NOREMOVE 标志).

若nCode的值小于0,则此挂钩函数必须不加处理地传送给函数CallNextHookEx,并返回其返回值.

wParam:指示产生此击键消息的虚拟键代码.

 

lParam:指示重复次数,扫描码,扩展标志,上下文代码,此前的键状态标志和变化状态标志,此参数可以是以下值的组合值:

0-15位:指示重复次数,此值纪录力偶由于用户继续摁键引发的击键重复次数.

16-23位:指示扫描码,此值依赖于键盘生产厂家.

第24位:指示此键是否为扩展键,比如功能键或数字小键盘上的键,当该键为扩展时,其值为1,否则为0.

25-28位:保留未用.

第29位:上下文代码.若Alt键被摁下,则此值为1,否则为0.  

第30位:指示此前的键状态,若在此消息被发送之前该键是摁下的,其值为1.若此前该键未被摁下,则其值为0.

第31位:指示变化状态,若此键正在被摁下,则其值位0. 正在被释放其值为1.

欲获得更多关于此lParam参数的信息,请参见 Keystroke Message Flags.

 

返回值: 若nCode的值小于0,则此挂钩函数必须返回函数CallNextHookEx所返回的值;若nCode的值大于或等于0,并且此挂钩处理过程并未对此消息进行处理,我们极力推荐对函数CallNextHookEx进行调用,并返回其返回值.否则,其他安装了挂钩WM_KEYBOARD的应用程序将无法收到挂钩通知,从而导致错误的行为.若此挂钩处理过程对此消息进行了处理,它应返回非0值以避免系统将此消息传递给挂钩键上的其他处理过程或目标窗口的处理过程.

备注: 一个应用程序通过调用函数SetWindowsHookEx指定WM_KEYBOARD挂钩类型和相应挂钩处理过程的首地址来安装此挂钩处理过程.

 

速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户自定义.

 

MessageProc

函数功能:挂钩处理过程是应用程序或库中定义的回调函数,它与函数 SetWindowsHookEx搭配使用.当一个对话框、消息框、菜单条、或滚动条中的输入事件发生,且由此引发的消息尚未被处理之前,系统对此挂钩处理过程进行调用.此函数可以对一个特定应用程序或所有应用程序的对话框、消息框、菜单条、或滚动引发的条消息进行监视.

类型HOOKPROC定义了指向此类回调函数的指针. MessageProc 是库中相应回调函数名的位置标志符.

 函数原形:LRESULT CALLBACK MessageProc(int code,WPARAM wParam,LPARAM lParam); 

 

参数:

nCode:指示产生此消息的输入事件类型.此参数可以是以下值之一:

MSGE_DDEMGR:当动态数据交换管理库(Dynamic Data Exchange Management Library (DDEML)正在等待一个同步处理的结束时产生此事件,关于DDEML的详情,参见Dynamic Data Exchange Management Library .

MSGF_DIALOGBOX:     输入事件由一个消息框或者对话框产生.

MSGF_MENU:         输入事件由一个菜单条产生.

MSGF_SCROLLBAR:       输入事件由一个滚动条产生.

MSGF_NEXTWINDOW:    输入事件由于用户摁下组合键<Alt+Tab>以激活另一个窗口而产生.

若nCode的值小于0,则此挂钩处理过程必须将该消息不加处理地传送给函数 CallNextHookEx 并返回其返回值.

wParam: 为NULL(0).

 

lParam: 指向MSG结构的[指针].

 

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

 

备注: 一个应用程序通过调用函数SetWindowsHookEx指定WH_MSGFILTER挂钩类型和相应挂钩处理过程的首地址来安装此挂钩处理过程.

若一个应用程序使用了DDEML并实行同步处理,而且要求必须在消息被分派前处理之,则一定要使用WH_MSGFILTER挂钩.

 

速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户自定义.

MouseProc

函数功能:该函数是应用程序或库文件定义的回调函数, 它与函数SetWindowsHookEx搭配使用,当应用程序调用函数 GetMessage 或PeekMessage 并且当前恰好有一个鼠标消息将要被处理时,系统就调用此挂钩处理过程.

类型HOOKPROC定义了指向此类回调函数的指针, MouseProc是应用程序定义或库定义的相应回调函数名的位置标识符.

 

函数原形:LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam); 

 

参数:

nCode:指示一个代码被挂钩处理过程用于决定如何处理此消息,此参数可以是以下值之一:

HC_ACTION   指示参数wParam 和lParam 包含了关于鼠标消息的信息.

HC_NOREMOVE 指示参数 wParam和lParam 中包含了关于鼠标的信息,而且此鼠标消息尚未从消息队列中被删除(一个应用程序调用函数PeekMessage并设置了 PM_NOREMOVE标志).

若nCode的值小于0,则此挂钩函数必须不加处理地传送给函数CallNextHookEx,并返回其返回值.

 

wParam:指示鼠标消息的标识符,

 

lParam:指向MOUSEHOOKSTRUCT 结构的[指针].

 

返回值: 若nCode的值小于0,则此挂钩函数必须返回函数CallNextHookEx所返回的值;若nCode的值大于或等于0,并且此挂钩处理过程尚未对此消息进行处理,我们极力推荐对函数CallNextHookEx进行调用,并返回其返回值.否则,其他安装了挂钩WM_MOUSE的应用程序将无法收到挂钩通知,从而导致错误的行为.若此挂钩处理过程对此消息进行了处理,它应返回非0值以避免系统将此消息传递给目标窗口的处理过程.

备注: 一个应用程序通过调用函数SetWindowsHookEx指定WM_MOUSE挂钩类型和相应挂钩处理过程的首地址来安装此挂钩处理过程.此挂钩处理过程一定不能安装JournalPlaybackProc回调函数.

 

速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户自定义.

原文地址:https://www.cnblogs.com/1175429393wljblog/p/5600714.html