0

我一直在使用以下代码来捕获控制中断,但我没有得到任何回报:

程序执行期间的 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

有什么我想念的吗?

4

2 回答 2

2

我已经编写了下面的代码(QB64)来拦截按键和按键释放。

在我的 Linux 操作系统上,该程序运行,但它不会拦截按键或中断键的按键释放。

我不知道上述行为是由于我的操作系统、操作系统配置还是我的键盘(罗技无线)造成的。我认为这是由于 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."
于 2020-12-10T10:20:29.770 回答
2

我发现以下代码可以在 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
于 2020-12-23T05:53:35.233 回答