Как перехватить Control-Alt-Delete в QB64

Я использую следующий код в 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

Я хотел бы знать, есть ли способ перехватить Control-Alt-Delete в QB64.


person eoredson    schedule 03.10.2016    source источник
comment
Насколько я знаю, ответ - нет, или, по крайней мере, вы не должны без очень веской причины. Последовательность клавиш генерирует аппаратное прерывание, которое обрабатывает ОС. Например, Windows XP запустит Диспетчер задач, если я правильно помню, а Windows Vista и более поздние версии выведут вас на экран, позволяющий выйти из системы, запустить Диспетчер задач или заблокировать компьютер. Если другая программа выйдет из-под контроля, я хотел бы иметь возможность остановить ее, и я не могу сделать это так же легко, пока работает ваша программа, перехватывающая Ctrl-Alt-Del.   -  person    schedule 04.10.2016
comment
Эта ссылка объясняет, почему перехват Control-Alt-Break не может быть выполнен без написания собственной GINA dll: msdn.microsoft.com/en-us/library/aa375457(v=vs.85).aspx   -  person eoredson    schedule 05.10.2016


Ответы (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)
person eoredson    schedule 06.12.2016