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