钩子捕获键盘消息:按一次为什么会响应两次呢
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
其它也要改,应该没问题了