RAWINPUT避坑指南(涉及GetRawInputData/GetRawInputBuffer)
本文介绍了Windows RAWINPUT的开发流程和注意事项。流程包括:获取设备信息、注册设备、获取处理数据及注销设备四个步骤。关键点:1)GetRawInputData和GetRawInputBuffer的区别在于数据处理方式;2)建议在后台线程处理数据以避免主线程卡顿;3)x86程序在64位系统上使用GetRawInputBuffer时需注意8字节偏移问题。开发时需特别注意消息循环机制,合理
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位电脑上使用,在微软文档里有提到这一点,因此要注意有八个字节的偏移,不然获取到的数据都不对应。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)