Нажатие клавиши преобразуется в двухбайтовый код, называемый скан-ASCII-кодом. Этот код помещается в буфер клавиатуры, откуда ваша программа может считать его с помощью прерывания системы BIOS. Старший байт двухбайтового кода называется скан-кодом и является отображением фактически нажатой клавиши. Скан-код не отражает состояние клавиш Shift, Ctrl или Alt и не является уникальным. Помимо скан-кодов нажатия, существуют коды отпускания клавиш, отличающиеся на шестнадцатеричное значение 80 в сторону увеличения. Младший байт полного кода, называемый ASCII-кодом, также не является уникальным, но полная комбинация скан и ASCII-кода уникальна. Некоторые клавиши не имеют ASCII-кода и вместо него возвращается ноль. Такие двухбайтовые коды называются расширенными. При приеме кода нажатой клавиши через DOS последняя отделяет от общего значения скан-код. Кроме того, работающий в системе русификатор может дополнительно транслировать скан-коды буквенных клавиш в ASCII-коды русских букв.
Исходя из сказанного, при использовании стандартной функции readkey, работающей с ASCII-кодами клавиш, в общем случае является правильной следующая схема обработки на Паскале:
ch := readkey; {Чтение символа в байт ch}
if ch = #0 then begin
{Если нет ASCII-кода, прочитать
дополнительно расширенный код}
ch := readkey;
{Обработка расширенного кода}
end
else
{Обработка ASCII-кода}
На Паскале десятичный код может быть записан в виде #N, где N -- число, например, #65 ('A' латинская). ASCII-коды основных печатных символов можно узнать из таблицы кодов. Наиболее востребованные коды приведены в табл.1, 2.
Enter |
13 |
Пробел |
32 |
Esc |
27 |
BackSpace |
8 |
Tab |
9 |
|
|
Клавиша |
Код |
Код с Shift |
Код с Ctrl |
Код с Alt |
F1 |
59 |
84 |
94 |
104 |
F2 |
60 |
85 |
95 |
105 |
F3 |
61 |
86 |
96 |
106 |
F4 |
62 |
87 |
97 |
107 |
F5 |
63 |
88 |
98 |
108 |
F6 |
64 |
89 |
99 |
109 |
F7 |
65 |
90 |
100 |
110 |
F8 |
66 |
91 |
101 |
111 |
F9 |
67 |
92 |
102 |
112 |
F10 |
68 |
93 |
103 |
113 |
Стрелка вверх |
72 |
|
|
|
Стрелка вниз |
80 |
|
|
|
Стрелка влево |
75 |
|
|
|
Стрелка вправо |
77 |
|
|
|
Insert |
82 |
|
|
|
Delete |
83 |
|
|
|
Home |
71 |
|
119 |
|
End |
79 |
|
117 |
|
Page Up |
73 |
|
132 |
|
Page Down |
81 |
|
118 |
|