QB64 中的控制中断
Control-Break in QB64
我一直在使用以下代码来捕获控制中断,但我在 return 中什么也没得到:
程序执行期间的 Control-Break 导致以下情况发生:
1)Invokes interrupt trap 1Bh
2)Places 00:00 into keyboard buffer
3)Sets flag 80h at memory 40:71h
检测Control-Break的例子(编译):
DO
X$=INKEY$
IF X$=CHR$(0)+CHR$(0) THEN
PRINT "*break*"
END
END IF
LOOP
另一个检测 Control-Break 的例子(已编译):
DEF SEG = &H40
POKE &H71, 0
DEF SEG
DO
DEF SEG = &H40
X = PEEK(&H71)
DEF SEG
IF X = 128 THEN
PRINT "*break*"
END
END IF
LOOP
有什么我遗漏的吗?
我已经编写了以下代码 (QB64) 来拦截按键和按键释放。
在我的 Linux OS 上运行此程序,但它不会拦截按键或 break 键的释放。
我不知道上述行为是由于我的 OS、OS 配置还是我的键盘(罗技无线)造成的。我认为这是由于 QB64 函数 _KEYHIT
行为。
PRINT "Hit Esc to exit"
DO
_LIMIT 20
x& = _KEYHIT
IF x& <> x1& THEN
IF x& < 0 THEN
PRINT "-"; HEX$(-x&)
ELSE
PRINT "+"; HEX$(x&); " [";
y& = x&
WHILE y& > 256
PRINT CHR$(y& MOD 256); "] [";
y& = y& \ 256
WEND
PRINT CHR$(y&); "]"
END IF
x1& = x&
END IF
IF x = 27 THEN EXIT DO
LOOP
PRINT "Escape pressed."
我发现以下代码可以在 qb64 中捕获 ctrl-break:
ON TIMER(1) GOSUB breaktrap
TIMER ON
x = _EXIT ' disable break
DO
_LIMIT 50
x$ = INKEY$
LOOP
breaktrap:
v = _EXIT
IF v THEN
PRINT "*break*"
SLEEP 5
SYSTEM
END IF
RETURN
我一直在使用以下代码来捕获控制中断,但我在 return 中什么也没得到:
程序执行期间的 Control-Break 导致以下情况发生:
1)Invokes interrupt trap 1Bh
2)Places 00:00 into keyboard buffer
3)Sets flag 80h at memory 40:71h
检测Control-Break的例子(编译):
DO
X$=INKEY$
IF X$=CHR$(0)+CHR$(0) THEN
PRINT "*break*"
END
END IF
LOOP
另一个检测 Control-Break 的例子(已编译):
DEF SEG = &H40
POKE &H71, 0
DEF SEG
DO
DEF SEG = &H40
X = PEEK(&H71)
DEF SEG
IF X = 128 THEN
PRINT "*break*"
END
END IF
LOOP
有什么我遗漏的吗?
我已经编写了以下代码 (QB64) 来拦截按键和按键释放。
在我的 Linux OS 上运行此程序,但它不会拦截按键或 break 键的释放。
我不知道上述行为是由于我的 OS、OS 配置还是我的键盘(罗技无线)造成的。我认为这是由于 QB64 函数 _KEYHIT
行为。
PRINT "Hit Esc to exit"
DO
_LIMIT 20
x& = _KEYHIT
IF x& <> x1& THEN
IF x& < 0 THEN
PRINT "-"; HEX$(-x&)
ELSE
PRINT "+"; HEX$(x&); " [";
y& = x&
WHILE y& > 256
PRINT CHR$(y& MOD 256); "] [";
y& = y& \ 256
WEND
PRINT CHR$(y&); "]"
END IF
x1& = x&
END IF
IF x = 27 THEN EXIT DO
LOOP
PRINT "Escape pressed."
我发现以下代码可以在 qb64 中捕获 ctrl-break:
ON TIMER(1) GOSUB breaktrap
TIMER ON
x = _EXIT ' disable break
DO
_LIMIT 50
x$ = INKEY$
LOOP
breaktrap:
v = _EXIT
IF v THEN
PRINT "*break*"
SLEEP 5
SYSTEM
END IF
RETURN