在QB64中陷阱Alt-F4

时间:2018-03-30 02:22:18

标签: basic qbasic qb64

我有一个实用程序,它有一个由Alt-F4调用的函数,但我不能因为它关闭了窗口。如何在QB64中捕获Alt-F4?

以下代码示例显示了检查Alt-F4的各种方法:

REM Trap Alt-F4 in QB64
DO
    _LIMIT 100
    x$ = INKEY$
    IF x$ = CHR$(27) THEN END
    IF LEN(x$) = 2 THEN
        IF ASC(RIGHT$(x$, 1)) = 107 THEN
            PRINT "Alt-F4"
        END IF
    END IF
LOOP
END

也试过这个没有效果:

KEY 15, CHR$(8) + CHR$(62)
ON KEY(15) GOSUB KeyTrap
KEY(15) ON
DO
    _LIMIT 100
    x$ = INKEY$
    IF x$ = CHR$(27) THEN END
LOOP
END
KeyTrap:
PRINT "Alt-F4"
RETURN

还尝试在_EXIT陷阱中捕获Alt-F4而没有结果:

' start timer trap.
ON TIMER(1) GOSUB Timer.Trap
TIMER ON
VarQ = _EXIT
DO
    _LIMIT 100
LOOP
END
' timer ctrl-break trap.
Timer.Trap:
VarQ = _EXIT
_DELAY 1
IF VarQ THEN ' Control-Break
    x$ = INKEY$
    IF LEN(x$) = 2 THEN
        IF ASC(RIGHT$(x$, 1)) = 107 THEN
            PRINT "Alt-F4"
            RETURN
        END IF
    END IF
    CLS
    SYSTEM
END IF
RETURN

捕获Alt-F4的另一种可能方法:

只检查更多关键字。

CONST KEY_RALT& = 100307
CONST KEY_LALT& = 100308
' start timer trap.
ON TIMER(1) GOSUB Timer.Trap
TIMER ON
VarQ = _EXIT
DO
    _LIMIT 100
LOOP
END
' timer ctrl-break trap.
Timer.Trap:
VarQ = _EXIT
_DELAY 1
IF VarQ THEN ' Control-Break
    x = _KEYHIT
    IF x = CVI(CHR$(0) + CHR$(62)) THEN ' F4
        IF _KEYDOWN(KEY_RALT&) OR _KEYDOWN(KEY_LALT&) THEN
            PRINT "Alt-F4"
            RETURN
        END IF
    END IF
    CLS
    SYSTEM
END IF
RETURN

还有一个用于使用内存地址进行检查的示例代码:

同样,它不会捕获Alt-F4:

DO
    _LIMIT 30
    b$ = INKEY$
    IF LEN(b$) THEN
        IF b$ = CHR$(27) THEN END
        DEF SEG = 0
        IF PEEK(1047) MOD 16 = 8 THEN
            IF b$ = CHR$(0) + "k" THEN
                PRINT "Alt-F4"
            END IF
        END IF
        DEF SEG
    END IF
LOOP

1 个答案:

答案 0 :(得分:1)

我相信答案很简单:

全屏运行。

Alt + 输入或更改您的程序设置。我忘了 Alt + F4 的chr $代码是什么,但我很确定它是CHR$(0) + CHR$(x)格式。

希望这有帮助!