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位电脑上使用,在微软文档里有提到这一点,因此要注意有八个字节的偏移,不然获取到的数据都不对应。

相关推荐
花落已飘1 个月前
HID协议
usb·鼠标·hid
叶余2 个月前
USB Gadget设备枚举失败的处理方法
usb·hid·gadget
byte轻骑兵3 个月前
【Bluedroid】蓝牙Hid Host get_protocol全流程源码解析
c++·hid·bluedroid
byte轻骑兵3 个月前
【Bluedroid】蓝牙HID Device virtual_cable_unplug全流程源码解析
c++·hid·bluedroid
byte轻骑兵3 个月前
【Bluedroid】蓝牙HID DEVICE 报告发送与电源管理源码解析
c++·hid·bluedroid
byte轻骑兵3 个月前
【Bluedroid】蓝牙HID DEVICE断开连接流程源码分析
android·c++·蓝牙·hid·bluedroid
byte轻骑兵3 个月前
【Bluedroid】蓝牙 HID 设备服务注册流程源码解析:从初始化到 SDP 记录构建
蓝牙·hid·bluedroid
qq_340474024 个月前
1.2 使用RawInputSharp来取得键盘硬件信息以及虚拟码
键盘·rawinput
技术宅AI代码控9 个月前
STM32模拟鼠标绝对坐标的设置
stm32·hid·usb hid·stm32鼠标·绝对坐标