根据文档,正确的做法是将您直接收到的参数传递给callnexthookex,与您收到的参数完全相同。不管您是否决定处理hook消息,您也应该调用callnexthookex。
According to MSDN
,的第一个参数
CallNextHookEx
在NT/XP/2003上被忽略,对于基于Win95的旧操作系统,它应该是
HHOOK
你在注册你的钩子时收到的
SetWindowsHookEx
.这些文档没有为Windows2000指定值,但是由于它是NT系列的一部分,所以合理的猜测是它也被忽略了。
考虑到所有这些,为NT系列操作系统编写代码的一个好方法可能是:
LRESULT CALLBACK CBTProc( int code, WPARAM wp, LPARAM lp )
{
if( code == HCBT_CREATEWND )
ProcessCreateWnd( wp, lp );
return CallNextHookEx( 0, code, wp, lp );
}
void ProcessCreateWnd( WPARAM wp, LPARAM lp )
{
// my code here
}
这可以确保在处理结束时始终调用钩子,并且很难意外地添加
return
那将绕过
长喙鱼
.