如何实现键盘scan code与USB键盘usage index的相互转换?
可用的官方转换接口
微软已提供多套官方接口实现扫描码与USB HID键盘Usage Index的双向转换,无需自行维护映射表:
- 用户态开发
Win10 1607及以上系统可直接调用user32.dll导出的MapVirtualKeyExW函数,将参数uMapType指定为6(即官方定义的MAPVK_VSC_TO_HID_USAGE枚举值),输入扫描码即可直接返回对应的USB键盘Usage ID。如果需要反向转换,将uMapType指定为7(MAPVK_HID_USAGE_TO_VSC)即可。
针对带E0/E1前缀的扩展扫描码,传入时只需将扩展标识位带上即可,函数会自动处理对应映射关系。
若需要适配Win10 1607以下版本,可直接从公开的扫描码规范中提取映射表打包为静态资源,开发量极低,无需逐行编写转换逻辑。 - 内核态驱动开发
适配Win7及以上系统可直接调用HID类驱动导出的HidKbdScanCodeToUsage内核函数,该函数在wdm.h中声明,链接时引入hidclass.lib即可使用,输入扫描码和对应扩展标志位即可直接输出USB键盘Usage ID,反向转换可以使用HidKbdUsageToScanCode函数。
内容的提问来源于stack exchange,提问作者Bri Bri
相关产品推荐
相关产品推荐

