如何将自制串口手绘板接入Windows Inking框架?
问题
自制了一款手绘板,可通过串口向PC发送笔的位置、压力及姿态数据,希望将该设备接入Windows Inking平台。请问如何将自制手绘板接入Windows Inking框架,以便在系统中使用该框架的功能?
已尝试的方法
- 查阅并运行了Windows.UI.Input.inking UWP API文档及相关Demo,确认该API仅适用于开发使用笔/触摸/鼠标输入的应用,无法用于开发输入设备驱动。
- 尝试使用Input Injection(
Windows.UI.Input.Preview.Injection)方案,但存在以下不足:InjectedInputPenInfo中的X倾斜/Y倾斜属性为int类型,而InkCanvas接收的PointerPoint.Properties中的倾斜属性为float类型,会导致精度丢失;PointerPoint.Properties包含ZDistance属性,但InjectedInputPenInfo无此属性,会导致数据丢失。
参考问题
如何在Windows中生成触控笔事件及压力数据?
解决方案
方案一:编写HID兼容驱动(推荐)
这是让设备完美适配Windows Inking的标准方式,系统会直接将你的手绘板识别为官方支持的笔输入设备,所有参数都能完整传递:
- 按照Windows HID笔设备规范(HID Usage Page 0x0D, Usage 0x02)设计HID报告描述符,包含位置(X/Y)、压力、X/Y倾斜、Z距离等需要的所有参数,确保数据格式符合系统要求。
- 使用**UMDF(User-Mode Driver Framework)**开发用户模式驱动:通过串口读取手绘板的原始数据,将其转换为符合HID规范的报告,再发送给Windows输入栈。
- 驱动安装完成后,系统会自动加载对应的笔输入支持,Windows Inking框架无需额外适配即可使用所有功能,精度和数据完整性完全有保障。
方案二:使用Raw Input API模拟笔输入
如果暂时不想开发驱动,可以用更底层的Raw Input API实现完整的笔输入模拟,弥补Input Injection的不足:
- 创建一个隐藏窗口,调用
RegisterRawInputDevices注册笔输入设备,用于接收和发送Raw Input数据。 - 构造
RAWINPUTHEADER和RAWINPUTPEN结构体:其中倾斜值可以通过HID单位映射实现高精度传递,Z距离可对应到RAWINPUTPEN中的相关HID字段(参考HID笔规范)。 - 调用
SendInput函数发送构造好的Raw Input数据,系统会将其识别为原生笔输入,InkCanvas能完整接收包括浮点倾斜、Z距离在内的所有属性。 - 注意处理设备坐标到屏幕坐标的转换,以及HID单位与系统输入单位的映射关系。
内容的提问来源于stack exchange,提问作者lichao
相关产品推荐
相关产品推荐

