多个键盘和低级挂钩

时间:2008-09-18 09:37:51

标签: c# winapi keyboard hardware hook

我有一个系统,我有多个键盘,真的需要知道键击来自哪个键盘。解释设置:

  1. 我有一个普通的PC和USB键盘
  2. 我有一个带有一些硬键的外部VGA屏幕
  3. 硬键被映射为标准USB键盘,发送有限数量的键码(F1,F2,Return,+和 - )
  4. 我有一个低级钩子(在C#中,但实际上调用了Win32功能),即使我的应用程序没有聚焦,也可以处理输入。

    问题在于,当使用普通键盘时,应用程序拾取的一些映射键码在外部屏幕上被驱动。外部屏幕发送并用于确认的其中一个按键是VK_RETURN。除非我可以识别“设备”并对其进行过滤,否则用户可能会在他们甚至不看的屏幕上执行操作并确认它们。

    我如何知道哪个键盘负责按键?

2 个答案:

答案 0 :(得分:15)

是的我纠正了,我的坏,每天都在学习新东西。

这是我试图弥补它:):

  • 使用:: RegisterRawInputDevices()注册要用作原始输入的设备(两个键盘)。

  • 您可以从GetRawInputDeviceList()获取这些设备

  • 在您注册设备后,您将开始收到WM_INPUT消息。

  • WM_INPUT消息的lParam包含一个RAWKEYBOARD结构,可用于确定输入来自的键盘,以及虚拟键码和消息类型(WM_KEYDOWN,WM_KEYUP,...)

  • 因此,您可以设置最后一条消息来自哪里的标志,然后将其发送给常规键盘输入处理程序。

答案 1 :(得分:-3)

无法做到这一点。 Windows为您摘录此内容。如上所述,您需要编写/修改设备驱动程序。