WH_MSGFILTER和WH_SYSMSGFILTER Hooks

【勇芳软件工作室】汉化HomePreviousNext

WH_MSGFILTER和WH_SYSMSGFILTER钩子使您能够监视通过菜单,滚动条,消息框或对话框处理的消息,并检测何时由于用户按ALT + TAB或ALT + ESC组合键。WH_MSGFILTER钩子只能监视传递给安装了钩子过程的应用程序创建的菜单,滚动条,消息框或对话框的消息。WH_SYSMSGFILTER钩子监视所有应用程序的消息。

WH_MSGFILTER和WH_SYSMSGFILTER钩子使您能够在模态循环中执行与主消息循环中完成的过滤相同的消息过滤。例如,应用程序通常在主循环中检索来自队列的消息的时间与调度消息的时间之间检查新消息,并根据需要进行特殊处理。然而,在模态循环期间,系统将检索和调度消息,而不允许应用程序在其主消息循环中过滤消息。如果应用程序安装了WH_MSGFILTER或WH_SYSMSGFILTER挂钩过程,系统将在模态循环期间调用该过程。

应用程序可以通过调用CallMsgFilter函数直接调用WH_MSGFILTER钩子。通过使用此函数,应用程序可以使用相同的代码在模态循环中过滤消息,因为它在主消息循环中使用。为此,将过滤操作封装在WH_MSGFILTER挂钩过程中,并在调用GetMessageDispatchMessage函数之间调用CallMsgFilter.

while(GetMessage(& msg,(HWND)NULL,0,0))

{

if(!CallMsgFilter(& qmsg,0))

DispatchMessage(&qmsg);

}

CallMsgFilter的最后一个参数只是传递给挂钩过程;您可以输入任何值。钩子过程通过定义一个常量(如MSGF_MAINLOOP)可以使用此值来确定从哪里调用过程。

有关详细信息,请参阅MessageProcSysMsgProc功能。