Расширенные коды клавиатуры
05-10-2009 23:25
к комментариям - к полной версии
- понравилось!
Нажатие клавиши преобразуется в двухбайтовый код, называемый скан-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, остальные нужные коды приводятся в табл. П5, П6.
Таблица П5. ASCII-коды некоторых клавиш
Enter
13
Пробел
32
Esc
27
BackSpace
8
Tab
9
Таблица П6. Расширенные коды некоторых клавиш
Клавиша
Код
Код с 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
вверх^
к полной версии
понравилось!
в evernote