скан-коды клавиш
г----------T----------T-------------T-------------¬ ¦ Alt-A 1e¦ Alt-P 19¦ Alt- 3 7a¦ Down Dn 50¦ ¦ Alt-B 30¦ Alt-Q 10¦ Alt-4 7b¦ Left <- 4b¦ ¦ Alt-C 2e¦ Alt-R 13¦ Alt-5 7c¦ Right -> 4d¦ ¦ Alt-D 20¦ Alt-S 1f¦ Alt-6 7d¦ Up Up 48¦ ¦ Alt-E 12¦ Alt-T 14¦ Alt-7 7e¦ End 4f¦ ¦ Alt-F 21¦ Alt-U 16¦ Alt-8 7f¦ Home 47¦ ¦ Alt-G 22¦ Alt-V 2f¦ Alt-9 80¦ PgDn 51¦ ¦ Alt-H 23¦ Alt-W 11¦ Alt-- 82¦ PgUp 49¦ ¦ Alt-I 17¦ Alt-X 2d¦ Alt-= 83¦ ¦ ¦ Alt-J 24¦ Alt-Y 15¦ ¦ ^Left 73¦ ¦ Alt-K 25¦ Alt-Z 2c¦ ¦ ^Right 74¦ ¦ Alt-L 26¦ ¦ Shift-Tab 0f¦ ^End 75¦ ¦ Alt-M 32¦ Alt-0 81¦ Ins 52¦ ^Home 77¦ ¦ Alt-N 31¦ Alt-1 78¦ Del 53¦ ^PgDn 76¦ ¦ Alt-O 18¦ Alt-2 79¦ ^PrtSc 72¦ ^PgUp 84¦ L----------¦----------¦-------------¦--------------
В следующей таблице приведены скан-коды клавиш, имеющихся только на 101-клавишной клавиатуре:
г-------------T------------------T------------------¬ ¦ F11 85¦ Alt-Bksp 0e ¦ Alt- Д / a4¦ ¦ F12 86¦ Alt-Enter 1c ¦ Alt- Д * 37¦ ¦ Shft-F11 87¦ Alt-Esc 01 ¦ Alt- Д - 4a¦ ¦ Shft-F12 88¦ Alt-Tab a5 ¦ Alt- Д + 4e¦ ¦ Ctrl-F11 89¦ Ctrl-Tab 94 ¦ Alt- Д Enter a6¦ ¦ Ctrl-F12 8a¦ ¦ ¦ ¦ Alt-F11 8b¦ Alt-up Up 98 ¦ Ctrl- Д / 95¦ ¦ Alt-F12 8c¦ Alt-down Dn a0 ¦ Ctrl- Д * 96¦ ¦ Alt-[ 1a¦ Alt-left <- 9b ¦ Ctrl- Д - 8e¦ ¦ Alt-] 1b¦ Alt-right -> 9d ¦ Ctrl- Д + 90¦ ¦ Alt-; 27¦ ¦ ¦ ¦ Alt-' 28¦ Alt-Delete a3 ¦ Ctrl- Д Up [8] 8d¦ ¦ Alt-` 29¦ Alt-End 9f ¦ Ctrl- Д 5 [5] 8f¦ ¦ Alt-\ 2b¦ Alt-Home 97 ¦ Ctrl- Д Dn [2] 91¦ ¦ Alt-, 33¦ Alt-Insert a2 ¦ Ctrl- Д Ins[0] 92¦ ¦ Alt-. 34¦ Alt-PageUp 99 ¦ Ctrl- Д Del[.] 93¦ L-------------¦------------------¦-------------------
Буква "Д" в последней таблице обозначает дополнительную ("калькуляторную") клавиатуру.
Для демонстрации использования функции 00h прерывания INT 16h мы подготовили программу, выводящую на экран скан-коды и ASCII-коды нажимаемых клавиш:
#include <stdio.h> #include <dos.h>
void main(void);
void main(void) {
union REGS rg;
printf("\nОпределение скан-кода и ASCII-кода клавиш." "\nДля завершения работы нажмите клавишу ESC.\n\n");
for(;;) {
// Вызываем прерывание INT 16h
rg.h.ah = 0; int86(0x16, &rg, &rg);
// Выводим на экран содержимое регистров AH и AL, // содержащих, соответственно, скан-код и ASCII-код // нажатой клавиши.
printf("\nScan = %02.2X Ascii = %02.2X", rg.h.ah, rg.h.al);
// Если была нажата клавиша ESC, завершаем работу программы
if(rg.h.ah == 1) break;
} }
Содержание раздела