我正在将当前使用 DirectInput 的应用程序转换为使用 RawInput。(DirectInput 是一个很大程度上被弃用的 API。)
不幸的是,尽管 RawInput 是 DirectInput 的推荐继任者,但它似乎并没有以与 DirectInput 完全相同的方式提供键盘数据。
DirectInput 使用DIK_*
常量(如DIK_A
、DIK_RETURN
等)来定义键盘上的特定物理键。这些键在键盘硬件上是一致的,但不会因键盘布局而改变。(例如,DIK_Q
指的是标准美国英语 QWERTY 键盘上 Q 键所在物理位置的任何键。)在我的情况下,这是所需的行为。
RawInput 的RAWKEYBOARD
结构同时提供 aMakeCode
和 a VKey
。我不能使用VKey
,因为它会根据键盘布局而变化。
但是与常数MakeCode
不对应 1:1 。DIK_*
特别是,它不区分左右 ctrl 和 alt 键,或者大多数数字键盘键与其他键。
所以我的问题是:是否可以使用RAWKEYBOARD
结构的内容来计算等效DIK_*
常数?假设这MakeCode
是解决这个问题的一部分,我可以依靠在MakeCode
键盘硬件上保持不变,就像DIK_*
常数一样吗?