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