RAWINPUT避坑指南(涉及GetRawInputData/GetRawInputBuffer)

RAWINPUT流程

1.使用GetRawInputDeviceList与GetRawInputDeviceInfo获取设备信息

2.使用RegisterRawInputDevices注册设备,需要提前知道设备的Usage与UsagePage,

鼠标:UsagePage=0x01,Usage=0x02 UsagePage=0x01,Usage=0x06

3.使用GetRawInputData或者GetRawInputBuffer获取数据并处理

4.停止的时候要注销设备,使用RegisterRawInputDevices,但是dwFlags=RIDEV_REMOVE.

在开发过程中需要注意以下几点:

1.GetRawInputData或者GetRawInputBuffer都可以获取数据,都依赖WM_INPUT消息,但是前者是一条一条获取,每次有消息到达就生成一条数据。后者是批量获取,一次性可以获取一个RAWINPUT的数组,但是需要有消息循环,不然是接收不到数据的。有了消息循环就可以自己决定什么时候去获取数据,只要有足够大的区域存放数据即可。

2.最好不要在 UI 线程或窗口过程(WindowProc)中直接进行 RawInput 数据处理,因为RawInput 捕获的输入事件是实时的,通常需要尽快处理和响应。如果将处理逻辑放在主线程或窗口过程中,特别是涉及大量数据转换、会导致明显的延迟和卡顿。这时候,可以开一个后台线程处理数据,或者创建一个新窗口专门用来接收WM_INPUT消息。

3.如果开发x86程序且使用了GetRawInputBuffer还需要注意,应用是否会在64位电脑上使用,在微软文档里有提到这一点,因此要注意有八个字节的偏移,不然获取到的数据都不对应。

相关推荐
byte轻骑兵2 天前
【HID】规范精讲[20]: 蓝牙HID低功耗黑科技——Sniff Subrating如何让设备续航翻倍?
网络·科技·人机交互·hid·蓝牙键盘
byte轻骑兵4 天前
【HID】规范精讲[19]: 蓝牙HID设备SDP交互实战——从服务搜索到属性解析的全流程拆解
人工智能·人机交互·键盘·hid·蓝牙遥控
byte轻骑兵7 天前
【HID】规范精讲[18]: 蓝牙HID设备低延迟秘籍——从报告速率到全链路优化实战
人机交互·无人机·键盘·鼠标·hid
byte轻骑兵13 天前
【HID】规范精讲[15]: 蓝牙HID遥控器设计精髓——两种拓扑模式的选型与实战
人机交互·交互·键盘·鼠标·hid
byte轻骑兵15 天前
【HID】规范精讲[14]: 蓝牙HID流量规格配置实战——鼠标、键盘与手柄的QoS优化指南
服务器·计算机外设·人机交互·键盘·hid
byte轻骑兵17 天前
【HID】规范精讲[13]: 蓝牙HID配对与虚拟线缆深度解析
人机交互·无人机·键盘·鼠标·hid
byte轻骑兵19 天前
【HID】规范精讲[12]: 蓝牙HID设备的连接信息存储机制深度解析
人工智能·人机交互·交互·键盘·鼠标·hid
byte轻骑兵21 天前
【HID】规范精讲[11]: 蓝牙HID设备信号交互流程深度拆解
人工智能·交互·hid·蓝牙键盘·蓝牙鼠标
byte轻骑兵23 天前
【HID】规范精讲[10]: 蓝牙HID设备的连接基石——GAP协议如何掌控发现、连接与安全
人工智能·人机交互·蓝牙·键盘·鼠标·hid
byte轻骑兵25 天前
【HID】规范精讲[9]: SDP协议深度解析与实战应用
人工智能·人机交互·键盘·鼠标·hid