Получение состояния переключающих клавиш



2.4.3. Получение состояния переключающих клавиш

На входе: AH = 02h На выходе: AL = Байт состояния переключающих клавиш

Функция возвращает в регистре AL состояние переключающих клавиш (Shift, Ctrl, Alt, ScrollLock, NumLock, CapsLock, Ins). Формат байта состояния соответствует формату байта, находящегося в области данных BIOS по адресу 0000h:0417h: Биты Значение 0 Нажата правая клавиша Shift. 1 Нажата левая клавиша Shift. 2 Нажата комбинация клавиш Ctrl-Shift с любой стороны. 3 Нажата комбинация клавиш Alt-Shift с любой стороны. 4 Состояние клавиши ScrollLock. 5 Состояние клавиши NumLock. 6 Состояние клавиши CapsLock. 7 Состояние клавиши Insert.

Функция может быть использована для анализа текущего состояния переключающих клавиш.



Изменим текст предыдущей программы таким образом, чтобы завершение ее работы происходило лишь в том случае, если переключающая клавиша CapsLock находится в выключенном состоянии (соответствующий светодиод не горит): #include <stdio.h> #include <dos.h> void main(void); void main(void) { union REGS rg; int i, zflag; for(;;) { // Выводим в цикле символ '*' putchar('*'); // Небольшая задержка во времени for(i=0; i<1000; i++); // Вызываем прерывание INT 16h для проверки буфера клавиатуры // Устанавливаем флаг, который будет сброшен при нажатии на // любую клавишу zflag = 1; _asm { mov ax, 0100h int 16h // Если нажатия не было, // продолжаем выполнение программы jz nokey // При нажатии на любую клавишу // сбрасываем флаг mov zflag, 0 nokey: } if(zflag == 0) { // Если флаг сброшен, читаем код нажатой клавиши из буфера // при помощи функции 01h прерывания INT 16h rg.h.ah = 0; int86(0x16, &rg, &rg); // Если была нажата клавиша ESC, завершаем работу программы, // при условии, что переключатель CapsLock выключен if(rg.h.ah == 1) { // Дополнительно проверяем состояние клавиши CapsLock, // этой клавише соответствует бит 0x40 в слове состояния rg.h.ah = 2; int86(0x16, &rg, &rg); if((rg.h.al & 0x40) == 0) break; else printf("\nДля завершения нажмите" " ESC " "при выключенной клавише CapsLock.\n"); } else printf("\nДля завершения нажмите ESC " "при выключенной клавише CapsLock.\n"); } } }



Содержание раздела