【问题标题】:How To Trap Control-Alt-Delete In QB64如何在 QB64 中捕获 Control-Alt-Delete
【发布时间】:2016-10-03 19:15:11
【问题描述】:

我在 QB64 中使用以下代码来捕获 Control-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

我想知道 QB64 中是否有办法捕获 Control-Alt-Delete

【问题讨论】:

  • AFAIK,答案是否定的,或者至少你不应该没有很好的理由。按键序列生成操作系统处理的硬件中断。例如,如果我没记错的话,Windows XP 将启动任务管理器,Windows Vista 及更高版本将带您进入允许您注销、启动任务管理器或锁定计算机的屏幕。如果另一个程序失控,我希望能够停止它,而当你的捕获 Ctrl-Alt-Del 的程序正在运行时,我不能那么容易地做到这一点。
  • 这个链接描述了为什么在不编写自己的 GINA dll 的情况下无法捕获 Control-Alt-Break:msdn.microsoft.com/en-us/library/aa375457(v=vs.85).aspx

标签: basic qbasic qb64


【解决方案1】:

这个片段描述了为什么 Control-Alt-Delete 没有被困住:

CONST KEY_RSHIFT& = 100303
CONST KEY_LSHIFT& = 100304
CONST KEY_RCTRL& = 100305
CONST KEY_LCTRL& = 100306
CONST KEY_RALT& = 100307
CONST KEY_LALT& = 100308
DO
    x = _KEYHIT
    IF x = CVI(CHR$(0) + CHR$(83)) THEN
        IF _KEYDOWN(KEY_RCTRL&) OR _KEYDOWN(KEY_LCTRL&) THEN
            IF _KEYDOWN(KEY_RALT&) OR _KEYDOWN(KEY_LALT&) THEN
                PRINT "KEYHIT: Ctrl-Alt-Delete"
            ELSE
                PRINT "KEYHIT: Ctrl-Delete"
            END IF
        ELSE
            IF _KEYDOWN(KEY_RALT&) OR _KEYDOWN(KEY_LALT&) THEN
                PRINT "KEYHIT: Alt-Delete"
            ELSE
                PRINT "KEYHIT: Delete"
            END IF
        END IF
    END IF
    k$ = INKEY$
LOOP UNTIL k$ = CHR$(27)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2013-09-29
    • 1970-01-01
    相关资源
    最近更新 更多