Системное программное обеспечение персональных ЭВМ


Пример 3 /*== ПРИМЕР 7.3 ==*/



Пример 4

/*== ПРИМЕР 7.4 ==*/ /*======== Просмотр состояния клавиш-переключателей =====*/ #include <dos.h>

void interrupt (*old5)(); /* Для сохр.старого вектора */ void interrupt new5(); /* Описание нового обработчика */ unsigned char end_flag; /* Признак окончания */ union REGS rr; struct SREGS sr; void *readvect(int in); void writevect(int in, void *h); /*===== main ====*/ main() { unsigned int kb_state, old_kb_state;/* Флаги клавиатуры */ int i; old_kb_state=peek(0x40,0x17); /* Перехват вектора 5 */ old5=readvect(5); writevect(5,new5); printf("\nНажимайте не клавиши-переключатели\n"); printf ("\nДля завершения нажимите не клавишу Print Scrn\n"); for (end_flag=0; end_flag==0;) { kb_state=peek(0x40,0x17); if (kb_state!=old_kb_state) { /* Если флаги изменились - отображаем состояние */ old_kb_state=kb_state; for(i=15; i>=0; i--) if ((kb_state>>i)&1) printf("1"); else printf("0"); printf("\n"); } } /* Восстановление вектора 5 */ writevect(5,old5); } /*==== Обработчик прерывания 5 ====*/ /* Это прерывание выполняется из обработчика прерывания 9 при нажатии клавиши Print Scrn */ void interrupt new5() { end_flag=1; /* Признак окончания взводится */ } /*==== Получение старого вектора ====*/ void *readvect(int in) { rr.h.ah=0x35; rr.h.al=in; intdosx(&rr,&rr,&sr); return(MK_FP(sr.es,rr.x.bx)); } /*==== Запись нового вектора ====*/ void writevect(int in, void *h) { rr.h.ah=0x25; rr.h.al=in; sr.ds=FP_SEG(h); rr.x.dx=FP_OFF(h); intdosx(&rr,&rr,&sr); }

Наконец, клавиши (комбинации) специальных действий. Нажатие этих клавиш или комбинаций распознается обработчиком BIOS, который вместо генерации по ним ASCII-кодов выполняет некоторые предустановленные операции. Наиболее часто употребляются клавиши:

  • PrintScreen - при нажатии на нее BIOS вызывает прерывание 5, обработчик которого содержит программу печати копии экрана. Подменив вектор прерывания 5, мы можем запрограммировать свои действия по клавише PrintScrn, что и сделано в предыдущем примере;
  • Ctrl+Alt+Del - распознавая эту комбинацию, BIOS передает управление на программу POST, как мы уже знаем, это - перезагрузка системы. (Некоторые вирусы, перехватывая прерывание 9, распознают эту комбинацию и выполняют по ней имитацию работы POST, оставаясь, таким образом, в памяти после кажущейся перезагрузки);
  • Ctrl+Break - обработка этой комбинации вызывает, как правило, прерывание DOS 0x23.


    - Начало -  - Назад -  - Вперед -