键盘钩子里区分按键

在做一个键盘测试demo时需要区分一些复合键。比如在数字键区当Num按下和按上时按键是不一样的,但是它们和其它区的按键是相同的,比如Ins,Del,上,下左右或者是翻页。通过测试发现KBDLLHOOKSTRUCT里有一个flags标记,它可以区分按键。上代码,

std::map<int, int> idlist = {
	{VK_END,VK_NUMPAD1},
	{VK_RETURN,313},
	{VK_UP,VK_NUMPAD8},
	{VK_DOWN,VK_NUMPAD2},
	{VK_LEFT,VK_NUMPAD4},
	{VK_RIGHT,VK_NUMPAD6},
	{VK_INSERT,VK_NUMPAD0},
	{VK_DELETE,VK_DECIMAL},
	{VK_NEXT,VK_NUMPAD3},
	{VK_PRIOR,VK_NUMPAD9},
	{VK_CLEAR,VK_NUMPAD5},
	{VK_HOME,VK_NUMPAD7}
};

int GetKeyID(int vkcode, DWORD flag)
{
	if ((flag & 0x01) == 0)
	{
 		auto ite = idlist.find(vkcode);
		if (ite != idlist.end())
			return ite->second;
	}
	return vkcode;
}

这样使用GetKeyID就可以获取到实际的键盘ID。当然有一个特殊的按键小键盘区的回车,它和大键盘区的回车是一样的,所以我得新定义了一个313的ID,来代表大键盘区的按键。这样即可区分出它们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值