如何判断某个键是否被按下,只知道它在美国键盘上的位置?

时间:2008-12-27 11:08:36

标签: windows keyboard

考虑到,对于Windows视频游戏,我需要确定是否按下了在美国英语键盘布局上生成`和〜字符的键(通常在Escape键下面并且保留为1)。这可能听起来像一个微不足道的问题,但对我来说似乎不是一个问题。

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

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

在Windows上有真正的方法吗?

2 个答案:

答案 0 :(得分:4)

OEM扫描码不会从键盘更改为键盘。没理由不使用它。

回到DOS天,相同的扫描码已用于游戏,因为它是检测键入和按键事件的唯一方法。没人遇到问题,我怀疑它将来会有所改变。

如果您想要其他选项,可以尝试使用DirectInput-API。它还为您提供原始扫描码,如果我没有弄错,您还可以查询每个键的物理位置,尺寸和内容。

答案 1 :(得分:1)

将游戏动作绑定到角色,而不是按键的位置。否则,你如何告诉用户按哪个键? “在逃生钥匙下”?他们可能没有任何东西,但如果你告诉他们“^键”,他们可以找到它。

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