读书人

钩子捕获键盘消息:按一次为什么会响应

发布时间: 2012-05-03 14:06:56 作者: rapoo

钩子捕获键盘消息:按一次为什么会响应两次呢
LRESULT CALLBACK Kb_Proc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
//KBDLLHOOKSTRUCT* pKB= (KBDLLHOOKSTRUCT*)lParam;
switch(wParam)
{
case VK_UP:
if(g_cur_pos.Y>0)
g_cur_pos.Y -= 1;
//SetCursorPos(g_cur_pos.X, g_cur_pos.Y);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), g_cur_pos);
break;
case VK_DOWN:
g_cur_pos.Y += 1;
//SetCursorPos(g_cur_pos.X, g_cur_pos.Y);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), g_cur_pos);
break;
case VK_LEFT:
if(g_cur_pos.X>0)
g_cur_pos.X -= 1;
//SetCursorPos(g_cur_pos.X, g_cur_pos.Y);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), g_cur_pos);
break;
case VK_RIGHT:
g_cur_pos.X += 1;
//SetCursorPos(g_cur_pos.X, g_cur_pos.Y);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), g_cur_pos);
break;
case VK_ESCAPE:
exit(1);
}
return CallNextHookEx(hHook, code, wParam, lParam);
}

问题:我按up、down、left、right键 光标为什么会移动两次呢

[解决办法]
keyup和keydown都会触发的,要筛选一下,参考(delphi代码,用法一样)
http://blog.csdn.net/bdmh/archive/2011/01/08/6124127.aspx
[解决办法]
按下一次,弹起一次,一共两次。
自己用BOOL型变量记录一下即可。
[解决办法]
按下一次,弹上来一次

比如把
case VK_UP修改成case VK_UPDOWN或者case VK_UPUP
其它也要改,应该没问题了

读书人网 >C++

热点推荐