在 QB64 中陷阱 Alt-F4
Trap Alt-F4 in QB64
我有一个实用程序,它有一个由 Alt-F4 调用的函数,但我不能,因为它关闭了 window。如何在 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
我相信答案很简单:
运行 全屏。
Alt+Enter 或更改您的程序设置。我忘记了 Alt+F4 的 chr$ 代码是什么,但我很确定它是 CHR$(0) + CHR$(x)
格式。
希望对您有所帮助!
我有一个实用程序,它有一个由 Alt-F4 调用的函数,但我不能,因为它关闭了 window。如何在 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
我相信答案很简单:
运行 全屏。
Alt+Enter 或更改您的程序设置。我忘记了 Alt+F4 的 chr$ 代码是什么,但我很确定它是 CHR$(0) + CHR$(x)
格式。
希望对您有所帮助!