确定来自不同设备的输入

Posted

技术标签:

【中文标题】确定来自不同设备的输入【英文标题】:Determine input from different devices 【发布时间】:2010-08-11 23:32:08 【问题描述】:

我的电脑有两个像键盘一样工作的设备,普通键盘和一个 HID(Human Interface Device)输入设备(这是一个遥控器)。

我想将输入与键盘和遥控器分开,只捕获遥控器。如何用 C/C++ 编写程序来完成这项任务?

这不是一件容易的事,因为这个程序依赖于操作系统。我在 Windows 上需要它,但如果有人知道如何在 Linux 上使用它,我也将不胜感激。

【问题讨论】:

【参考方案1】:

在 Windows XP 及更高版本上,您可以使用原始输入设备消息。首先调用RegisterRawInputDevices() API 函数来启用“键盘”的原始输入。您调用GetRawInputDeviceList() 枚举输入设备并找到与您的遥控器对应的句柄。然后您处理包含原始输入事件的 WM_INPUT 窗口消息,并检查附加的 RAWINPUT 结构的标头以查看源设备句柄是否与您之前获得的句柄匹配。如果是,您可以继续处理该事件。

注意 RIDEV_INPUTSINK 标志,它可能对您有用。如果您指定它,它会使您的窗口接收事件的 WM_INPUT 消息即使它不是前台窗口

【讨论】:

【参考方案2】:

我在 Linux 下完成了这项工作 - 我拥有的设备是一个条形码阅读器,显示为 HID 键盘。

我通过在/dev/input 中打开相应的事件设备,然后使用EVIOCGRAB ioctl 来“抓取”输入设备,这使它成为我的应用程序独有的(该输入设备的事件不再转到 X ,或其他任何东西)。然后,我只需从事件设备中读取输入事件并根据需要对其进行操作。

【讨论】:

这里我展示了如何在 Linux 下做到这一点:youtube.com/watch?v=_6lGwldHS1I

以上是关于确定来自不同设备的输入的主要内容,如果未能解决你的问题,请参考以下文章

Wayland架构

来自外部设备的意外输入 - iOS

WASAPI 音频设备的同步

安卓屏后二路视频输入怎么设置

Python3 - 无法根据来自对象检测过程的输入正确启动输出设备

确定哪个应用程序正在使用音频设备