2

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

4

1 回答 1

8

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

这是解释为什么这不能按照您认为的方式工作的部分原因。这背后有着悠久的历史。键盘控制器针对 IBM AT 重新设计,同样针对增强型键盘。它开始为添加到键盘布局中的键发送 0xe0 和 0xe1 前缀。就像正确的 Ctrl 和 Alt 键一样。

但是键盘总是有两个 shift 键。最初的 IBM PC 没有将它们视为特殊键,它们只是具有不同的扫描码。这在以后的更新中得到了维护。因此,您不会获得它们的 RI_KEY_E0 或 E1 标志。您必须通过 RAWKEYBOARD.MakeCode 值来区分它们。左 shift 键的 makecode 为 0x2a,右键为 0x36。

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

于 2011-05-07T12:01:22.600 回答