使用RAWINPUT区分左右移位键

Ant*_*eru 2 windows winapi input raw-input

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

Han*_*ant 8

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

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

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

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