VC HOOK 键盘钩子 注意事项

来源:互联网 发布:现在淘宝生意好做吗 编辑:程序博客网 时间:2024/06/06 00:05

转自:http://hi.baidu.com/%C4%BE%D2%D7%D8%A3/blog/item/79967eeba990fbded539c9f5.html
键盘钩子 里面只有一个
wParam 判断的时候只能 判断这个键 的键值 无法判断 是 keydown还是 keyup
这些信息保存在lParam中
例如判断一个按键按下时 应该写成
if(wParam==VK_XX&&(lparam&(0X40000000)))
不然的话   只写if(wParam==VK_XX)代表两个消息 keydown keyup
KeyboardProc  
参数:
  code:
  根据这个数值决定怎样处理消息
  如果 code 小于0,则 必须让KeyboardProc()函数返回CallNextHookEx()
  code可以是下列值:
  HC_ACTION:wParam和lParam包含按键消息
  HC_NOREMOVE:wParam和lParam包含按键消息,并且按键消息不能从消息队列中移除(一个被PeekMessage函数调用的请求,指定
  PM_NOREMOVE标志)
  wParam:
  按键的虚拟键值消息,例如:VK_F1
  lParam:
  32位内存,内容描述包括:指定扩展键值,扫描码,上下文,重复次数。
  0-15位:
  描述:按下键盘次数。
  16-23位
  指定扫描码. 依赖于OEM
  24位
  当24位为1时候:表示按键是扩展键
  当24位为0时候:表示按键是是数字键盘按键
  25-28位
  保留位
  29位
  上下文键:为1时: ALT按下,其他情况为0
  30位
  如果是按键按下后发送的消息,30位为1,如果是按键抬起后30位为0;
  31位
  指定转变状态:31位为0时候,按键正在被按下,为1时候,按键正在被释放


返回值:
  如果参数1:code小于0,则必须 返回CallNextHookEx(),也就是返回CallNextHookEx()的返回值
  如果参数1:code大于等于0,并且钩子处理函数没有处理消息,强烈建议您 返回CallNextHookEx()的返回值,否则当您安装WH_KEYBOARD钩子时
  ,钩子将不会得到通知,并返回错误结果。

  如果钩子处理的消息,您可以返回一个非0值,防止系统把消息传递给钩子链中的下一个钩子,或者把消息发送到目标窗口。