考虑到,对于Windows视频游戏,我需要确定是否按下了在美国英语键盘布局上生成`和〜字符的键(通常在Escape键下面并且保留为1)。这可能听起来像一个微不足道的问题,但对我来说似乎不是一个问题。
当Windows发送键盘消息时,它指定虚拟键代码和OEM扫描代码。我们不能依赖OEM扫描代码,因为“价值取决于OEM” - 我们也不能依赖虚拟键代码,因为它取决于当前活动的键盘布局。
我们当前的“解决方案”是使用LoadKeyboardLayout
和MapVirtualKeyEx
来查找在美国英语键盘布局上生成`字符的键的OEM扫描码,然后只是监听该OEM扫描码。问题是如果用户没有安装美国英语布局,这将不起作用。
在Windows上有真正的方法吗?
答案 0 :(得分:4)
OEM扫描码不会从键盘更改为键盘。没理由不使用它。
回到DOS天,相同的扫描码已用于游戏,因为它是检测键入和按键事件的唯一方法。没人遇到问题,我怀疑它将来会有所改变。
如果您想要其他选项,可以尝试使用DirectInput-API。它还为您提供原始扫描码,如果我没有弄错,您还可以查询每个键的物理位置,尺寸和内容。
答案 1 :(得分:1)
将游戏动作绑定到角色,而不是按键的位置。否则,你如何告诉用户按哪个键? “在逃生钥匙下”?他们可能没有任何东西,但如果你告诉他们“^键”,他们可以找到它。
您可能还希望将其配置为适应异国情调的键盘布局和用户偏好。