2008-09-18 107 views
12

我有一个系统,我有多个键盘,真的需要知道哪个键盘的键击来自哪里。为了解释设立:多个键盘和低级挂钩

  1. 我有一个正常的PC和USB键盘
  2. 我有一些硬键
  3. 硬键映射为一个标准的USB键盘外接VGA屏幕,发送的键码数量有限(F1,F2,返回,+和 - )

我有一个低级别挂钩(在C#中,但实际上呼吁Win32的功能),它甚至能够应对输入时我的申请没有集中。

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

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

+0

我已经在这里回答了这个问题:[如何检测输入设备,如果鼠标和触摸板都启用](http://stackoverflow.com/a/8804862/1000282)。答案使用我创建的c库和驱动程序。 – 2012-02-16 19:23:02

+0

不严格地回答我的问题。被标记为正确的答案在几年内运行良好。 – 2012-02-24 11:28:41

+0

@ ray-haves您是否可以确认您是否可以阻止其他应用程序的_making_输入,即使您已经过滤它。也就是说,一旦按键通过原始输入进行过滤,您是否能够阻止它被其他操作系统处理? – 2012-02-24 19:14:26

回答

14

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

这是我在弥补吧:)尝试:

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

  • 你可以从GetRawInputDeviceList)这些装置(

  • 您已经注册了设备后,你就会开始WM_INPUT消息。

  • 的WM_INPUT消息的lParam中包含RAWKEYBOARD结构,你可以用它来确定,其中输入来自的键盘,再加上虚拟键码和消息的类型(WM_KEYDOWN,WM_KEYUP,...)

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

-3

没办法做到这一点。 Windows为你抽象。如前所述,您需要编写/修改设备驱动程序。