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轻骑兵8 小时前
【HID】规范精讲[8]: 蓝牙HID核心之L2CAP层——无线人机交互的通信桥梁设计解析
人工智能·人机交互·蓝牙·键盘·hid
byte轻骑兵2 天前
【HID】规范精讲[7]: 蓝牙HID底层核心——基带与LMP依赖深度解析
网络·人工智能·人机交互·蓝牙·键盘·hid
byte轻骑兵5 天前
【HID】规范精讲[6]: 蓝牙HID系统设计指南——从合规到体验的全维度要求
人机交互·蓝牙·键盘·鼠标·遥控·hid
byte轻骑兵6 天前
【HID】规范精讲[5]: 蓝牙 HID Boot Protocol Requirements 详解
人机交互·蓝牙·键盘·鼠标·hid
byte轻骑兵8 天前
【HID】规范精讲[4]: 蓝牙HID传输机制——无线数据的传递规则与底层逻辑
人工智能·人机交互·键盘·鼠标·hid
byte轻骑兵11 天前
【HID】规范精讲[3]: 蓝牙HID协议消息详解——无线交互的数据传输语言
人工智能·人机交互·蓝牙·键盘·hid
byte轻骑兵13 天前
【HID】规范精讲[2]: 蓝牙HID架构解密——从USB到无线的底层设计逻辑
架构·人机交互·蓝牙·hid·蓝牙键盘·蓝牙鼠标
byte轻骑兵14 天前
【HID】规范精讲[1]: 无线人机交互的底层逻辑与实战解析
人机交互·蓝牙·键盘·鼠标·hid
锻炼²4 个月前
USB 设备/配置/接口/端点/描述符 和 HID类请求详解
stm32·usb·hid·全速传输·sof包·中断传输
一个平凡而乐于分享的小比特5 个月前
USB HID通信协议详解
usb·hid