我正在将当前使用 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_*常数一样吗?