3

考虑到,对于 Windows 视频游戏,我需要确定在美式英语键盘布局上生成 ` 和 ~ 字符的键(通常位于 Escape 键下方并左至 1)是否已被按下。这听起来像是一个微不足道的问题,但对我来说似乎不是一个问题。

当 Windows 发送键盘消息时,它会指定虚拟键代码和 OEM 扫描代码。我们不能依赖 OEM 扫描码,因为“值取决于 OEM”——我们也不能依赖虚拟键码,因为它依赖于当前活动的键盘布局。

我们目前的“解决方案”是使用LoadKeyboardLayoutMapVirtualKeyEx找到在美国英语键盘布局上生成`字符的键的OEM扫描码,然后只听那个OEM扫描码。问题是如果用户没有安装美国英语布局,这将不起作用。

有没有真正的方法可以在 Windows 上做到这一点?

4

2 回答 2

4

OEM 扫描码不会因键盘而异。没有理由不使用它。

早在 DOS 时代,相同的扫描码已用于游戏,因为它是检测按键向上和按键向下事件的唯一方法。没有人对它有任何问题,我怀疑它将来会改变。

如果你想要另一个选项,你可能想试试 DirectInput-API。它还为您提供原始扫描码,如果我没记错的话,您还可以查询每个键的物理位置、尺寸等。

于 2008-12-27T11:19:23.300 回答
1

将游戏动作与角色联系起来,而不是钥匙的位置。否则,你如何告诉用户按下哪个键?“在转义键下”?他们可能没有任何东西,但如果你告诉他们“^ 键”,他们可以寻找它。

您可能还希望使其可配置以适应异国情调的键盘布局和用户偏好。

于 2008-12-27T11:20:02.877 回答