Description
Данные с клавиатуры поступают в основном в виде сканкодов, которые создаются при нажатии клавиш или используются в протоколе с компьютером. ( Различные коды используются встроенным программным обеспечением клавиатуры, а также существует несколько наборов кодов. В этом разделе мы говорим только о кодах по умолчанию — кодах из переведенного набора сканкодов 2. Менее распространенные режимы рассматриваются ниже) Каждое нажатие и отпускание клавиши выдает от 0 до 6 сканкодов.
1.1 Нажатие клавиши
Ниже я упомяну только сканкод для нажатия клавиши (`make`). Сканкод для отпускания клавиши (`break’) получается из него установкой старшего бита (добавлением 0x80 = 128). Таким образом, при нажатии Esc получается сканкод 01, при отпускании Esc — сканкод 81 (hex). Для последовательностей все аналогично: клавиатура-/ дает e0 35 при нажатии, e0 b5 при отпускании. Большинство клавиатур при повторном нажатии повторяют код make (код нажатия вниз). Некоторые также будут имитировать события Shift вниз и Shift вверх во время повтора.
Клавиши PrtSc/SysRq и Pause/Break — особенные. Первая выдает сканкод e0 2a e0 37, когда одновременно не нажата клавиша-модификатор, e0 37 вместе с Shift или Ctrl, но 54 вместе с (левым или правым) Alt. (И при отпускании получаются ожидаемые последовательности. Но см. ниже.) Вторая выдает сканкод e1 1d 45 e1 9d c5 при нажатии (без модификатора) и ничего при отпускании. Однако вместе с (левым или правым) Ctrl вы получаете e0 46 e0 c6, и снова ничего при отпускании. Это не повторяется.
Отчет о клавишах с другим поведением см. ниже.
Существует множество сообщений о ноутбуках с плохо отлаженными событиями при нажатии клавиш. Таким образом, неожиданное нажатие клавиш, вероятно, следует считать необычным и игнорировать.