Справочник программиста на персональном компьютере фирмы IBM. Клавиатура
Страница 20. Перепрограммирование клавиши PrtSc


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


   Клавиша  PrtSc  выдает звездочку (ASCII 42),  если  нажать  ее
одну, она выдает  расширенный  код  114,  если нажать ее вместе с
клавишей  Ctrl.  Но комбинация <Shift> + <PrtSc> имеет совершенно
отдельный статус. Нажатие на другие клавиши заставляют прерывание
клавиатуры  помещать  их коды в буфер клавиатуры (или,  для  кла-
виш-переключателей,  записывать  их  состояние  [3.1.7]). Нажатие
клавиши не влияет на выполняемую программу, до тех пор пока прог-
рамма не станет считывать символ клавиши из буфера клавиатуры. Но
комбинация  <Shift>  + <PrtSc> заставляет  прерывание  клавиатуры
немедленно передать  управление  процедуре,  на которую указывает
вектор прерывания 5.  В некотьором смысле она работает как  аппа-
ратное прерывание.
   Прерывание  5  запрограммировано  таким  образом, чтобы выдать
содержимое  экрана на принтер.  Но вектор прерывания может указы-
вать на процедуру,  предназначенную  для  совершенно другой цели.
Например,  изощренная программа имитации, которой требуются  часы
для завершения своей работы, может  прервана в любое время комби-
нацией Shift + PrtSc, чтобы она выдала рапорт о текущем состоянии
расчетов. Вам может также захотеться, чтобы на принтер можно было
посылать копию графического экрана. Другая возможность, использо-
вать PrtSc как  способ  доступа  к  программе,  которая находится
резидентно в памяти во время загрузки MS DOS [1.3.4]. Такая стра-
тегия позволит Вам  написать  утилиту,  которая может работать из
другого программного обеспечения.
   Низкий уровень.
   Здесь приведена основная форма перепрограммирования процедуры.
Не   забудьте   восстановить   оригинальный   вектор   прерывания
(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            ;

 
« Предыдущая статья   Следующая статья »