考虑一下,对于 Windows 视频游戏,我需要确定在美式英语键盘布局上生成 ` 和 ~ 字符的键(通常位于 Escape 键下方并保留为 1)是否已被按下。这听起来似乎是一个微不足道的问题,但对我来说似乎不是一个问题。
当Windows发送键盘消息时,它指定虚拟键代码和OEM扫描代码。我们不能依赖 OEM 扫描代码,因为“值取决于 OEM” - 我们也不能依赖虚拟键代码,因为它取决于当前活动的键盘布局。
我们当前的“解决方案”是使用LoadKeyboardLayout
and MapVirtualKeyEx
查找在美式英语键盘布局上生成 ` 字符的按键的 OEM 扫描代码,然后只需侦听该 OEM 扫描代码。问题是,如果用户没有安装美国英语布局,这将不起作用。
有没有真正的方法可以在 Windows 上做到这一点?
OEM 扫描码不会随着键盘的不同而改变。没有理由不使用它。
回到 DOS 时代,相同的扫描码已用于游戏,因为它是检测按键向上和按键按下事件的唯一方法。没有人遇到任何问题,我怀疑它将来会改变。
如果您想要其他选择,您可能想尝试一下 DirectInput-API。它还为您提供原始扫描码,如果我没有记错的话,您还可以查询每个键的物理位置、尺寸等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)