钩子过程应该在比以下注册表项中的LowLevelHooksTimeout值中指定的数据条目更短的时间内处理消息:
HKEY_CURRENT_USER \ Control Panel \ Desktop
该值以毫秒为单位。如果挂钩过程超时,系统会将消息传递给下一个挂钩。但是,在Windows 7及更高版本中,无需调用即可静默删除挂钩。应用程序无法知道钩子是否被移除。
我确实理解没有检查钩链或获取状态的函数,但是。有解决方法吗?
我发现在一些事件之后,我的钩子不再接收事件,而且我已经考虑过了。
编辑1: 在我的代码中,我用windows set hook ex设置了钩子 我收到通知,因此钩子配置得很好 我放了一个消息循环 我解开钩子并返回
钩子程序代码:
LRESULT CALLBACK CallWndProc(int code, WPARAM w_param, LPARAM l_param){
KBDLLHOOKSTRUCT* kbd_hook = NULL;
char tmp[0xFF] = {0};
char tmp2[0xFF] = {0};
if ( code == HC_ACTION )
if( w_param == WM_SYSKEYDOWN || w_param == WM_KEYDOWN)
{
kbd_hook = (KBDLLHOOKSTRUCT*)l_param;
GetKeyNameText((kbd_hook->scanCode << 16) , tmp2, 0xFF);
CharToOem(tmp2, tmp);
printf("tmp: %s\n",tmp);
}
return CallNextHookEx(key_handle, code, w_param, l_param);
};
当我在键盘上键入Num.lock并暂停键时,挂钩没有收到通知