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