2016-10-03 11 views
1

Я использую следующий код в Qb64 улавливать Control-Break:Как Trap Control-Alt-Delete В Qb64

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 -Удалить в QB64.

+2

AFAIK, ответ нет или, по крайней мере, вы не должны без очень уважительной причине. Последовательность клавиш генерирует аппаратное прерывание, которое обрабатывает ОС. Например, Windows XP запустит Диспетчер задач, если я правильно помню, и Windows Vista и более поздние версии перенесут вас на экран, позволяющий выйти из системы, запустить Диспетчер задач или заблокировать компьютер. Если другая программа выходит из-под контроля, я бы хотел остановить ее, и я не могу сделать это так же легко, пока ваша программа, которая задерживает Ctrl-Alt-Del, работает. –

+0

Эта ссылка описывает, почему захват Control-Alt-Break не может быть выполнен без написания вашей собственной DLL-библиотеки GINA: https://msdn.microsoft.com/en-us/library/aa375457(v=vs.85).aspx – eoredson

ответ

0

Этот надрез описывает, почему 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) 
+0

код был написан для QB64. – eoredson

 Смежные вопросы

  • Нет связанных вопросов^_^