首页 / 知识

关于c#:多个键盘和低级钩子

2023-04-17 01:41:00

关于c#:多个键盘和低级钩子

Multiple keyboards and low-level hooks

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

  • 我有普通的PC和USB键盘
  • 我有一个带一些硬键的外部VGA屏幕
  • 硬键映射为标准USB键盘,发送有限数量的键代码(F1,F2,Return,+和-)
  • 我有一个低级挂钩(在C#中,但实际上是在调用Win32功能),即使我的应用程序不集中,它也能够处理输入。

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

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


    是的,我可以纠正,我很糟糕,每天都在学习新知识。

    这是我尝试弥补的:):

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

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

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

    • WM_INPUT消息的lParam包含RAWKEYBOARD结构,您可以使用该结构确定输入的键盘,虚拟键码和消息类型(WM_KEYDOWN,WM_KEYUP等)。

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


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


    键盘系统设置解释

    最新内容

    相关内容

    猜你喜欢