使用RAWINPUT区分左右shift键

RAWINPUT提供了两个标志( RI_KEY_E0RI_KEY_E1 )来检查是否按下了左键或右键的版本。 这适用于CTRL,但不适用于左右偏移。 事实上,两者的标志都是一样的, VK_SHIFT也是一样的( VK_SHIFT )。 我怎样才能知道哪个class次被按下? 我正在使用Windows 7.有趣的是,无论我按哪个shift键,flags / vkey值都是一样的。

Windows 7和我只能得到VK_SHIFT,从来没有L / R变种

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

但键盘总是有两个换档键。 原来的IBM个人电脑没有考虑到他们的特殊键,他们只是有不同的扫描码。 在以后的更新中维护了这个 因此,你不会得到它们的RI_KEY_E0或E1标志。 您必须通过RAWKEYBOARD.MakeCode值来区分它们。 左移键有makecode 0x2a,右键是0x36。

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