多个键盘和低级挂钩
时间:2020-03-06 14:20:35 来源:igfitidea点击:
我有一个系统,其中有多个键盘,真的需要知道按键来自哪个键盘。解释设置:
- 我有普通的PC和USB键盘
- 我有一个带一些硬键的VGA外部屏幕
- 硬键映射为标准USB键盘,发送有限数量的键代码(F1,F2,Return,+和-)
我有一个低级挂钩(在Cbut中实际上是在调用Win32功能),即使我的应用程序不集中,它也能够处理输入。
问题在于,当使用普通键盘时,某些映射的键代码由应用程序在外部屏幕上驱动时拾取。由外部屏幕发送并用于确认的按键之一是VK_RETURN。除非我能识别"设备"并对其进行过滤,否则用户可能正在执行动作并在甚至没有看的屏幕上确认它们。
我如何知道哪个键盘负责按键操作?
解决方案
没有办法做到这一点。 Windows为我们抽象了这一点。如前所述,我们需要编写/修改设备驱动程序。
是的,我站得住脚,不好,每天都在学习新知识。
这是我试图弥补的尝试:):
- 使用:: RegisterRawInputDevices()注册要用于原始输入的设备(两个键盘)。
- 我们可以从GetRawInputDeviceList()获取这些设备。
- 注册设备后,我们将开始收到WM_INPUT消息。
- WM_INPUT消息的lParam包含RAWKEYBOARD结构,我们可以使用该结构确定输入的键盘,以及虚拟键代码和消息的类型(WM_KEYDOWN,WM_KEYUP等)。
- 因此,我们可以设置最后一条消息的来源标志,然后将其分派到常规键盘输入处理程序。