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