VC键盘钩子 模拟键盘输入 输出2遍如何解决

voidKeyDownTTT(){::keybd_event(0X57,0,KEYEVENTF_KEYUP,0);::keybd_event(0X57,0,0,0);}L... void KeyDownTTT()
{
::keybd_event(0X57,0,KEYEVENTF_KEYUP,0);
::keybd_event(0X57,0,0,0);
}

LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if(wParam == VK_TAB)
{
KeyDownTTT();
return 1;
}
return CallNextHookEx(g_hHook,code,wParam,lParam);
}

运行后按TAB 输出2遍w
即ww

如何解决这个问题 如何只让它输出一遍呢?
::keybd_event(0X57,0,0,0);
::keybd_event(0X57,0,KEYEVENTF_KEYUP,0);

写倒了 不过这不是重点
展开
 我来答
bhtzu
2015-08-19 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4216万
展开全部
lParam: 30位 如果是按键按下后发送的消息,30位为1,如果是按键抬起后30位为0;
KeyboardProc你只判断了wParam,因此按下和抬起消息都会接收并处理,这样就是两次。

另外,你处理的过于简单,更安全的处理应该判断参数1:
code大于等于0,并且钩子处理函数没有处理消息,强烈建议您 返回CallNextHookEx()的返回值,否则当您安装WH_KEYBOARD钩子时,钩子将不会得到通知,并返回错误结果。如果钩子处理的消息,您可以返回一个非0值,防止系统把消息传递给钩子链中的下一个钩子,或者把消息发送到目标窗口。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式