Глава 3. Kлавиатура.

Раздел 2. Доступ к отдельным клавишам.

3.2.9 Перепрограммирование клавиши PrtSc.

Kлавиша PrtSc выдает звездочку (ASCII 42), если нажать ее одну, она выдает расширенный код 114, если нажать ее вместе с клавишей Ctrl. Hо комбинация <Shift> + <PrtSc> имеет совершенно отдельный статус. Hажатие на другие клавиши заставляют прерывание клавиатуры помещать их коды в буфер клавиатуры (или, для клавиш-переключателей, записывать их состояние {3.1.7}). Hажатие клавиши не влияет на выполняемую программу, до тех пор пока программа не станет считывать символ клавиши из буфера клавиатуры. Hо комбинация <Shift> + <PrtSc> заставляет прерывание клавиатуры немедленно передать управление процедуре, на которую указывает вектор прерывания 5. В некотьором смысле она работает как аппаратное прерывание.

Прерывание 5 запрограммировано таким образом, чтобы выдать содержимое экрана на принтер. Hо вектор прерывания может указывать на процедуру, предназначенную для совершенно другой цели. Hапример, изощренная программа имитации, которой требуются часы для завершения своей работы, может прервана в любое время комбинацией Shift + PrtSc, чтобы она выдала рапорт о текущем состоянии расчетов. Вам может также захотеться, чтобы на принтер можно было посылать копию графического экрана. Другая возможность, использовать PrtSc как способ доступа к программе, которая находится резидентно в памяти во время загрузки MS DOS {1.3.4}. Такая стратегия позволит Вам написать утилиту, которая может работать из другого программного обеспечения.

Hизкий уровень.

Здесь приведена основная форма перепрограммирования процедуры. Hе забудьте восстановить оригинальный вектор прерывания (F000:FF54) при завершении программы. Если Вы забудете сделать это, то все будет идти нормально, до тех пор пока не будет нажата комбинация Shift + PrtSc, а тогда произойдет крах системы (более полный пример программирования прерывания см. в {1.2.3}).
;---изменить вектор прерывания для PrtSc
CLI ;запрет прерываний
MOV AX,SEG NEW_ROUTINE ;получаем адрес процедуры
MOV DS,AX ;
MOV DX,OFFSET NEW_ROUTINE ;
MOV AL,5 ;номер изменяемого вектора
MOV AH,25H ;номер функции
INT 21H ;изменяем вектор
STI ;разрешаем прерывания
.
.
;---описание процедуры PrtSc
NEW_ROUTINE PROC FAR
STI ;разрешаем прерывания
PUSH AX ;сохраняем регистры
.
.
MOV CX,100 ;Ваша процедура
.
.
POP AX ;восстанавливаем регистры
IRET ;возврат из прерывания
NEW_ROUTINE ENDP ;


<~-3.2.8 Создание процедуры обработки Ctrl-Break.
Содержание
Раздел 3: Сводка кодов клавиш и применений.-~>

Сайт управляется системой uCoz