如何获得挂钩状态?

时间:2018-01-09 10:55:18

标签: c winapi hook

我引用win api reference

  

钩子过程应该在比以下注册表项中的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并暂停键时,挂钩没有收到通知

0 个答案:

没有答案