键盘钩子里区分按键

本文介绍了一种在键盘测试demo中区分复合键的方法。通过KBDLLHOOKSTRUCT的flags标记来识别不同区域按键的差异,并提供了GetKeyID函数的具体实现,以准确获取键盘的实际ID。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做一个键盘测试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,来代表大键盘区的按键。这样即可区分出它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值