我想知道最终用户按下了什么,所以我使用了getch()
.
如果用户按下Right,我可以得到0xE0 0x4D
。
如果用户按下Ctrl+ Right,我可以获得0xE0 0x47
.
如果用户按下Shift+ Right,我可以获得0xE0 0x4D
.
Right和 Shift+ Rightfrom的返回getch()
是一样的,我怎么知道最终用户按下了什么?
根据您报告的按键值,我假设您正在使用一些 MS-DOS 环境和编译器,并且您已将键盘输入设置为扫描码模式。如果是这样,您应该了解所有驱动程序逻辑详细信息。特别是,按住 Shift 会报告相应的扫描码。该表报告两个班次有 2Ah 和 36h,因此,您应该将两者都考虑在内,保持按下修饰符的内部表,以及两个 Ctrl、两个 Alt、Caps 等。
(这真的是你想要的吗?扫描码是非常低级的野兽。)
更新:我忘了指定导航键处理是特定于键盘本身的。对于数字块,它取决于 NumLock 状态。对于附加的箭头/导航块,它通常用作关闭 NumLock 的数字块,但存在细微差别。有很好的详细描述,就像这个一样,并且应注意反映例如集 1 和翻译集 2 之间的差异(后者是当前与 PS/2 一起使用的)。BIOS 中 USB 键盘的 PS/2 仿真可以添加自己的细节。一般来说,所有这些并不复杂但很麻烦,并且需要许多遗留问题的知识。
一个简单的 getch 无法处理所有键盘事件。它不会像你想要的那样工作。