使用RAWINPUT区分左右移位键

时间:2011-05-07 09:47:37

标签: windows winapi input raw-input

RAWINPUT提供两个标志(RI_KEY_E0RI_KEY_E1)来检查是否按下了左键或右键。这适用于CTRL,但不适用于左右移位。实际上,两者的标志是相同的,VKey也是相同的(VK_SHIFT)。如何找出按下哪个班次?我正在使用Windows 7.有趣的是,无论我按哪个shift键,flags / vkey值都完全相同。

1 个答案:

答案 0 :(得分:8)

  

Windows 7,我只获得VK_SHIFT,而不是L / R变体

这是解释为什么这不符合您认为应该做的方式的一部分。这背后有古老的历史。键盘控制器为IBM AT重新设计,再次为增强型键盘。它开始为添加到键盘布局的键发送0xe0和0xe1前缀。就像右侧的Ctrl和Alt键一样。

但是键盘总是有两个shift键。最初的IBM PC并不认为它们是特殊键,它们只是有不同的扫描码。在以后的更新中保留了哪个。因此,您不会为它们获取RI_KEY_E0或E1标志。您必须通过RAWKEYBOARD.MakeCode值区分它们。左移键有makecode 0x2a,右键有0x36。

请注意,左Ctrl和Alt键也没有标记。它们与旧PC键盘布局上的相应键匹配。 MSDN Library文章中的标志描述不是很准确。