<shift> + <right> vs. <right>?</right> </right> </shift>

时间:2014-01-01 08:56:09

标签: c getch

我想知道最终用户的压力,因此我使用了getch()

如果用户按,我可以获得0xE0 0x4D

如果用户按 Ctrl + ,我可以获得0xE0 0x47

如果用户按 Shift + Right ,我可以获得0xE0 0x4D

来自getch() Shift + 的返回是相同的,所以我怎么知道什么是 - 用户有压力吗?

2 个答案:

答案 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无法处理所有键盘事件。它不会以你想要的方式工作。