我确实知道您可能会轮询键盘缓冲区以获取修饰键,例如 ALT 或 CTRL。但即使在旧的 DOS 程序中,当我按下这些键时也会执行一个操作(例如,通过按 ALT 来更改菜单按钮的颜色)。在DOS下有没有办法获得这些密钥?这是如何做到的?我认为在 BASIC 中没有解决方案,尽管 BASIC 有一些可用的 ON Eventhandler。欢迎对此问题提出任何建议或意见。
You can look at the KeyboardStatusFlags at linear address 1047 in the BIOS data area. For the Alt key you examine bit 3, and for the Ctrl key you examine bit 2. Next QBASIC program does exactly that:
DEF SEG = 0
DO
IF PEEK(1047) AND 8 THEN
PRINT "ALT is pressed"
EXIT DO
ELSEIF PEEK(1047) AND 4 THEN
PRINT "CTRL is pressed"
EXIT DO
END IF
LOOP
回复评论
还有一种方法可以通过查看地址来获取按下的按键(ASCII 值)吗?
您可以再次在键盘缓冲区(循环缓冲区)中找到此信息。 BIOS 维护一个字大小的指针,指向存储下一个可用密钥的位置 (HEAD),以及一个字大小的指针,指向存储最近缓冲的密钥后面的位置 (TAIL)。如果 HEAD 等于 TAIL,则键盘缓冲区为空。INKEY$
在这种情况下将返回一个空字符串。
Head% = PEEK(1050) + 256 * PEEK(1051)
Tail% = PEEK(1052) + 256 * PEEK(1053)
IF Head% <> Tail% THEN
Ascii% = PEEK(1024 + Head%)
Scan% = PEEK(1024 + Head% + 1)
ELSE
Ascii% = 0
Scan% = 0
END IF
上面代码的“优点”是你可以preview键盘缓冲区中接下来可用的键(如果有)。钥匙没有被移除。INKEY$
可以提供相同的信息但也会删除钥匙.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)