Ремаппинг клавиш на клавиатуре / Хабр
Всю свою жизнь был фанатом бесшумных, тонких, и красивых клавиатур и к моему удивлению обнаружил что таковых не так уж и много, из доступных в свободной продаже, — их единицы. Пришлось пользоваться «Genius SlimStar Pro», и все равно она меня угнетала, как и мысль о том, что я никогда не найду клавиатуру которая бы удовлетворяла меня на все 100%. Я такую нашел и по рекомендации товарища Boomburum, приобрел “Illuminated Keyboard“, которая стала достойной подругой моей “MX Revolution“, и я окончательно порвал отношения с Genius, а последние рассказы о поддержке пользователей со стороны Logitech, убедили меня, что вложенные (не малые деньги) себя оправдают за 3 гарантийных года.
Но есть небольшая беда в клавиатурах этой компании, — “Не стандартные, не удобные, или не нужные расположения некоторых кнопок“. В случае с Illuminated, это две одинаковые кнопки “\”, левая из которых пошла в ущерб клавише «LShift», Кстати на картинке вы можете заметить что раньше эти клавиатуры имели стандартный размер «LShift». Под катом, я расскажу как вернуть «стандартную длину» этой кнопки, так как в слепой печати и в силу привычки, я нажимаю именно / вместо шифта. А заодно расскажу как без дополнительного установленного ПО, на примере, вы сможете менять назначения любых клавиш ваших клавиатур (в том числе и функциональных/медийных) при помощи Реестра и Скан-кода клавиш.
Спецификация для Windows.
При нажатии любой клавиши контроллер клавиатуры вырабатывает скан-код, соответствующей позиции клавиши, который передаются в компьютер. Служебные коды, которые может вырабатывать контроллер клавиатуры, передаются для обработки подпрограммам BIOS. В буфере клавиатуры для кода клавиши отводится по 2 байта, т. е. он рассчитан на 16 символов.
Узнать Скан-код необходимой для ремаппинга клавиши вы можете здесь, а если у вас супер новая клавиатура с кнопками космического происхождения, то отловить скан-код вы можете используя программу “KeyboardTest” от разработчика Passmark Software. Программка платная, но бесплатным триалом. Или OpenSource Программу SharpKeys. Она потребовалась для определения скан-кода левой “\”, так как многие наивно полагали что сигналы у обеих одинаковые, а значит и не подлежат ремаппингу. На деле оказалось не так.
Правый “\” имеет скан-код: 2b.00
Левый нижний “\” имеет скан-код: 56.00
И так, мы определили скан-код нашей незадачливой кнопки, теперь нам нужно найти скан-код «LShift». Его можно найти по данной выше ссылке и он равен: 2A.00
Есть куча приложений которые делают этот ремаппинг, многие за базу принимают существующие скан-коды, многие не имеют сканера, что бы определить скан-код клавиши которой нет в базе. Да и устанавливать лишнее приложение очень не хотелось. По-гуглив я остановился на возможностях Windows. а точнее редактора реестра (Пуск-Выполнить: regedit). Или вышеупомянутую программу SharpKeys, которая имеет GUI и выполняет такую же замену в реестре
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
создайте бинарный параметр с именем “Scancode Map“
2. В параметр «Scancode Map» записываем следующие значения:
00.00.00.00.00.00.00.00.02 — девятый байт (02) в этой записи означает количество клавиш которое мы будем менять (и равен количеству клавиш +1) в нашем случае это 02, так как мы меняем значения одной клавиши. После этого вписываем еще три «пустых» байта, и теперь наш параметр выглядит так:
00.00.00.00.00.00.00.00.02.00.00.00.
Поскольку мы уже определили все Скан-коды, то продолжая наш параметр, нам следует указать скан-код значения новой кнопки (в нашем случае это 2A.00), а затем скан-код старой (заменяемой) кнопки 56.00. Теперь необходимо закрыть эту функцию четырьмя «пустыми» байтами, то есть 00.00.00.00:
3. Перезагружаем компьютер и пользуемся нашими новыми кнопками.
PS: Если нужно сделать ремаппинг не на всем ПК, а только в вашем сеансе, то значения необходимо менять в HKEY_CURRENT_USER\SYSTEM\CurrentControlSet\Control\Keyboard Layout
UPD: Если вы боитесь работать в реесте, то создайте текстовый файл с расширением *.reg, и впишите туда следующее:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,2a,00,56,00,00,00,00,00
затем сохраните, запустите, и перезагрузите ПК.
UPD2: Перенос Скриншотов на
1. Левый Win-key выглядит так:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,37,E0,5B,E0,00,00,00,00
Правый Win-key выглядит так:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
К вопросу оценки ПЭМИН цифровых сигналов. Клавиатуры.
Автор: Кондратьев А.В.
Следующим типовым устройством ПЭВМ, вроде бы и несложным, но доставляющим, порою, хлопоты исследователю, является клавиатура.
В общем-то устройство несложное. Особенно ноне уже устаревшие модели, подключаемые к порту PS/2. Как показывают многочисленные экспериментальные данные микросхема управления «клавы» сканирует нажатия клавиш и передаёт в последовательном коде в порт. Тактовая частота этой передачи кратна (в подавляющем числе случаев) » 6,3 или 10 кГц. Хотя автору попались в самые последние года пара экземпляров, тактовая частота которых лежала в районе 20 кГц.
Все клавиатуры при нажатии и удерживании любой клавиши начинают (после некоторой паузы) повторять передачу кода клавиши «до бесконечности». В обычном режиме это, как правило, через несколько секунд приводит к переполнению буфера контроллера и нарушению работы. Появляется звуковой сигнал системного «динамика» – «писк». Суть тест-режима (самого общепринятого) заключается в блокировании команды переполнения буфера, что позволяет, при нажатой клавише, обеспечить бесконечную передачу по кабелю «клавы» выбранного символа.
Как и всегда, для правильного последующего расчёта результата, необходимо создать постоянное чередование импульсов в кодовом пакете. Для кодов клавиатуры таких комбинаций может существовать две:
10101010 (55) клавиша « +; = »
01010101 (АА) в типовых таблицах – не применяется
Общая таблица скан-кодов приведена в таблице 14.1
Таблица 14.1 – Скан-коды клавиатуры
Клавиша |
Скан-код |
Клавиша |
Скан-код |
Клавиша |
Скан-код |
Клавиша |
Скан-код |
---|---|---|---|---|---|---|---|
1 |
16 |
2 |
1E |
3 |
26 |
4 |
25 |
5 |
2E |
6 |
36 |
7 |
3D |
8 |
3E |
9 |
46 |
0 |
|
– |
4E |
+ |
55 |
Backspace |
66 |
Tab |
0D |
Q |
15 |
W |
1D |
E |
24 |
R |
2D |
T |
2C |
Y |
35 |
U |
3C |
I |
43 |
O |
44 |
|
4d |
[ |
54 |
] |
5B |
Enter |
5A |
Ctrl(L) |
14 |
A |
1C |
S |
1B |
D |
23 |
F |
2B |
G |
34 |
H |
33 |
J |
3B |
K |
42 |
L |
4B |
; |
4C |
‘ |
52 |
` |
0E |
Shift(L) |
12 |
\ |
61 |
Z |
1A |
X |
22 |
C |
21 |
V |
2A |
B |
32 |
N |
31 |
M |
3A |
, |
41 |
. |
49 |
/ |
4A |
Shift(R) |
59 |
Alt(L) |
11 |
Space |
29 |
Caps Lock |
58 |
Esc |
76 |
F1 |
05 |
F2 |
06 |
F3 |
04 |
F4 |
0C |
F5 |
03 |
F6 |
0B |
F7 |
83 |
F8 |
0A |
F9 |
01 |
F10 |
09 |
F11 |
78 |
F12 |
07 |
Scroll Lock |
7E |
*[numpad] |
7C |
Num Lock |
77 |
7[numpad] |
6C |
8[numpad] |
75 |
9[numpad] |
7D |
-[numpad] |
7B |
4[numpad] |
6B |
5[numpad] |
73 |
6[numpad] |
74 |
+[numpad] |
5A |
1[numpad] |
69 |
2[numpad] |
72 |
3[numpad] |
7A |
0[numpad] |
70 |
.[numpad] |
71 |
Alr(R) |
E0-11 |
Ctrl(R) |
E0-14 |
Print Screen |
E0-12-E0-7C |
Insert |
E0-70 |
Delete |
E0-71 |
Left |
E0-6B |
Home |
E0-6C |
End |
E0-69 |
Up |
E0-75 |
Down |
E0-72 |
PageUp |
E0-7D |
PageDown |
E0-7A |
Right |
E0-74 |
Enter[numpad] |
E0-5A |
/[numpad] |
E0-4A |
Таким образом, при реализации тест-режима и, например, положенном на клавишу «+» грузике в кабеле «клавы» будет присутствовать бесконечная последовательность пакетов импульсов. При этом период следования импульсов в пакете (то есть тактовая частота), будет равна 6,10 или 20 кГц, а частота следования пакетов будет много ниже. Формат данных приведён на рисунке 14.1
Для обмена данными в кабеле клавиатуры служат две линии – KBData и KBSync. При передаче скан-кодов клавиатура выставляет очередной разряд данных на линии KBData и подтверждает передачу переводом из «1» в «0» сигнала на линии KBSync.
Контроллер может сигнализировать о своей неготовности передавать/принимать данные низким уровнем на линии KBSync. Все остальное время, когда нет данных для передачи, обе линии имеют высокий уровень сигнала.
Как следует из вышеприведённого, в спектре ПЭМИН кабеля клавиатуры следует ожидать частотных составляющих с тактовой частотой 1/76,04·10-6=13,15 кГц. Причём из-за наличия двух, сдвинутых по фазе, сигналов с разными (но кратными!) периодами, чётные и нечётные частотные составляющие будут отличаться по амплитуде.
Как и следует ожидать, ПЭМИН линии синхроданных неинформативен, в принципе. Но отличить один ПЭМИН от другого совсем непросто. Кабель один, сигналы синхронны…
Практически единственный способ – подобрать скан-код с минимальным числом логических «1» в посылке. Таковыми являются клавиши «F3» и F9» (03 и 01 в hex-коде). Код «00» не используется.
Осциллограмма скан-кода «F3» приведена ниже.
Строго «по энергетике», если измерить все частотные составляющие ПЭМИН с кодом «=» и, например, кодом «F9», то разность в показаниях приёмника на КАЖДОЙ из частотных составляющих и есть истинно информационная часть энергии ПЭМИН. Причём это максимум максиморум. Работа достаточно сложная и утомительная, если нет возможности поручить её «автомату». Сами-то составляющие ПЭМИН для столь низких частот выявляются не без труда. Так ещё и разности «ловить»…
В практике СИ, в подавляющем числе случаев, просто измеряют уровни ПЭМИН (ничего не вычитая) и считают параметр защищённости. Можно и так, «с запасом», но знать истинное положение дел специалист обязан.
В заключение рассмотрения – «распиновка» разъемов AT- и PS/2-клавиатуры.
«Картинки» на приёмнике выглядит далеко не так «классически», однако и он вполне узнаваем. Вот примеры
На спектре хорошо видно возрастание амплитуды компонент с уменьшением частоты.
Есть ещё особенности измерений «клавы» в этой частотной области (от десятков кГц и далее). Дело в том, что клавиатура, в обычном размещении, находится неподалеку от системного блока. А в верхней части СБ находится импульсный блок питания – мощнейший источник ПЭМИН и по «Е», и по «Н» компонентам. В «свете» такого театрального софита, тускловатый «свет» клавиатуры узреть – особое искусство! Поэтому предлагаю следующий приём. Отодвиньте «клаву» от СБ как можно дальше. Лучше – на удлинителе PS/2. Эдак метра на 2-2,5.
Разместите антенну так, чтобы на неё наводилось как можно меньше от СБ (сигнал, при полосе приёмника больше 10 кГц – сплошной спектр). И вот около так сориентированной, неподвижной антенны, начинайте крутить «клаву» и её кабель (не наоборот!). Тогда у Вас будет много больше шансов обнаружить сигналы ПЭМИН именно клавиатуры, увидеть компоненты ПЭМИН на экране анализатора воочую.
Всё вышеизложенное относилось к клавиатуре с интерфейсом PS/2. Но сейчас их массово заменяют клавиатуры с интерфейсом USB.
Вообще этот интерфейс достаточно подробно рассматривался совместно с принтерами. Однако будет нелишним дать некоторое «целеуказание» и относительно клавиатуры.
Вспомним построение пакетов для интерфейса USB, учитывая, что клавиатура подключается, строго, с low-speed (то есть, фактически по интерфейсу USB 1.0).
Максимальный размер полезной нагрузки DATA (payload) для low-speed устройств составляет 8 байт. То есть это, как раз, то, что требует скан-код клавиатуры.
Увидеть сигнал (именно данные) в линии USB оказалось не такой уж простой задачей. Тем не менее – вот что выявилось именно в кабеле типовой USB «клавы» модели GENIUS KB-06XE, конкретно в линии (проводе) «data +» (рисунок 14.10)
Эти две осциллограммы меняют друг друга с неустановленной (хаотической) периодичностью, причём «картинки» сигналов не зависят от нажатой клавиши клавиатуры (или ненажатой никакой). Никаких иных изменений в «переменной» части пакета (фрейма) выявить не удалось.
Периодичность следования этих пакетов жёстко стабилизирована (рис. 14.11), а длительность каждого составляет (видно на осциллограммах) около 34 ±1 мкс.
Пакеты следуют каждые 4 мс. Однако необходимо отметить, что окончание каждого пакета всё время «дрожит», причём заметно, классический «джиттер». Поэтому спектральная картинка несколько размыта и становится чёткой лишь при достаточно длительном усреднении.
Кроме того, следует учитывать, что из-за разных периодов следования импульсов и разной их длительности спектр носит характер некоторой смеси из спектра сплошного и линейчаатого. Тем не менее лепестковый характер спектра, естественный для бесконечной последовательности пакетов и кратный в своих «лепестках» средней длительности пакета, сохраняется весьма наглядно. Только «нули» функции сглажены джиттером и неременным периодом следования отдельных импульсов. Однако сама картинка вполне характерна. При более тонком частотном разрешении спектр начинает разрешаться на «линии», обусловленные частотой следования пакетов (250 Гц) (рис. 14.13)Таким образом, при простейшем и незасинхронизованном с истинной передачей скан-кода просмотре осциллограмм, выявить и визуализовать участки фрейма (пакета), отвечающий за передачу данных, не удалось. Тем не менее, можно утверждать, что ПЭМИН кабеля клавиатуры всё равно будет вот такой и никакой другой. Понятно, на каких частотах его искать, понятно, что он будет носить характер сплошного (во всяком случае, при частотном разрешении приёмника более 0,3 кГц). И понятно, какую величину подставлять при расчётах в качестве тактовой (минимальный период импульсов в пакете в эксперименте составил 1,322 мкс). Измерить это, при любых СИ, имея осциллограф, хотя бы с 200 МГц полосой – задача тривиальная. Тест-режим, по сути – любой, можно нажимать клавиши (любые), можно не нажимать ничего. Пакеты по интерфейсу передаются всё равно. И, в первом приближении, считаем их информативными (пока не доказано обратное).
Приведённые осциллограммы и спектры получены с помощью осциллографа АКИП-4108/2, подключённому к тому же компьютеру, на котором выполнялись измерения (надо заметить – весьма функциональный повтор разработки фирмы «PICO Technology» нашими. Не хуже китайцев 🙂 ) .
Спектр явно уходит далеко за 1 МГц (больше не позволил осциллограф, а подключать анализатор большого смысла не было). Остальное обусловлено уже кабелем, как случайной антенной и степенью его экранирования.
Для иных режимов интерфейса USB нужен уже осциллограф с полосою в многие ГГц.
Как именно считать сплошной спектр и, при этом, остаться в рамках действующих НМД – разговор отдельный и не для открытого обсуждения, увы… Однако в последующих публикациях придётся к нему вернуться, деваться некуда. Попытаюсь «остаться в рамках дозволенного»…
код – это… Что такое Скан-код?
Скан-код — код, присвоенный каждой клавише, с помощью которого драйвер клавиатуры распознает, какая клавиша была нажата. При нажатии любой клавиши контроллер клавиатуры распознаёт клавишу и посылает её скан-код в порт 60h. При отпускании клавиши контроллер клавиатуры устаревшего формата IBM PC/XT посылает в тот же порт скан-код, увеличенный на 80h, а более нового формата IBM PC/AT — два байта: F0h и скан-код (скан-коды клавиатуры AT также отличаются от XT, см. таблицу). Некоторые клавиши генерируют не один, а несколько скан-кодов (так, правые ⇧ Shift , Alt , Ctrl , обе Win , а также Menu , Insert , Delete , Page Up , Page Down , Home , End , стрелки и все ACPI- и мультимедиа-клавиши генерируют два скан-кода, первый из которых — E0, клавиша PrtScr генерирует 4 скан-кода, а клавиша Pause — целых 6 скан-кодов). Каждый байт, записанный в порт 60h, генерирует аппаратное прерывание int 09h.
Скан-коды жёстко привязаны к каждой клавише на аппаратном уровне и не зависят ни от состояния индикаторов Caps Lock , Num Lock и Scroll Lock , ни от состояния управляющих клавиш ( ⇧ Shift , Alt , Ctrl ).
Скан-коды клавиш
Все скан-коды ниже даются в шестнадцатеричной системе.
Большинство скан-кодов на XT-клавиатуре соответствуют физическому местоположению клавиш, начиная с клавиш Esc (код 01) и цифровых клавиш 1-9 (коды 02-09). К примеру, клавиши второго ряда ( Tab ⇆ Q W E R T Y U I O P [ ] ↵ Enter ) имеют последовательные скан-коды 0F-1C (15-28 в десятичной системе).
Клавиша | Код нажатия XT | Код отпускания XT | Код нажатия AT | Код отпускания AT |
---|---|---|---|---|
Основная клавиатура | ||||
A | 1E | 9E | 1C | F0,1C |
B | 30 | B0 | 32 | F0,32 |
C | 2E | AE | 21 | F0,21 |
D | 20 | A0 | 23 | F0,23 |
E | 12 | 92 | 24 | F0,24 |
F | 21 | A1 | 2B | F0,2B |
G | 22 | A2 | 34 | F0,34 |
H | 23 | A3 | 33 | F0,33 |
I | 17 | 97 | 43 | F0,43 |
J | 24 | A4 | 3B | F0,3B |
K | 25 | A5 | 42 | F0,42 |
L | 26 | A6 | 4B | F0,4B |
M | 32 | B2 | 3A | F0,3A |
N | 31 | B1 | 31 | F0,31 |
O | 18 | 98 | 44 | F0,44 |
P | 19 | 99 | 4D | F0,4D |
Q | 10 | 90 | 15 | F0,15 |
R | 13 | 93 | 2D | F0,2D |
S | 1F | 9F | 1B | F0,1B |
T | 14 | 94 | 2C | F0,2C |
U | 16 | 96 | 3C | F0,3C |
V | 2F | AF | 2A | F0,2A |
W | 11 | 91 | 1D | F0,1D |
X | 2D | AD | 22 | F0,22 |
Y | 15 | 95 | 35 | F0,35 |
Z | 2C | AC | 1A | F0,1A |
0 | 0B | 8B | 45 | F0,45 |
1 | 02 | 82 | 16 | F0,16 |
2 | 03 | 83 | 1E | F0,1E |
3 | 04 | 84 | 26 | F0,26 |
4 | 05 | 85 | 25 | F0,25 |
5 | 06 | 86 | 2E | F0,2E |
6 | 07 | 87 | 36 | F0,36 |
7 | 08 | 88 | 3D | F0,3D |
8 | 09 | 89 | 3E | F0,3E |
9 | 0A | 8A | 46 | F0,46 |
~ | 29 | 89 | 0E | F0,0E |
- | 0C | 8C | 4E | F0,4E |
= | 0D | 82 | 55 | F0,55 |
\ | 2B | AB | 5D | F0,5D |
[ | 1A | 9A | 54 | F0,54 |
] | 1B | 9B | 5B | F0,5B |
; | 27 | A7 | 4C | F0,4C |
' | 28 | A8 | 52 | F0,52 |
, | 33 | B3 | 41 | F0,41 |
. | 34 | B4 | 49 | F0,49 |
/ | 35 | B5 | 4A | F0,4A |
← Backspace | 0E | 8E | 66 | F0,66 |
Space | 39 | B9 | 29 | F0,29 |
Tab ⇆ | 0F | 8F | 0D | F0,0D |
Caps Lock | 3A | BA | 58 | F0,58 |
Левый ⇧ Shift | 2A | AA | 12 | F0,12 |
Левый Ctrl | 1D | 9D | 14 | F0,14 |
Левый Alt | 38 | B8 | 11 | F0,11 |
Левый Win | E0,5B | E0,DB | E0,1F | E0,F0,1F |
Правый ⇧ Shift | 36 | B6 | 59 | F0,59 |
Правый Ctrl | E0,1D | E0,9D | E0,14 | E0,F0,14 |
Правый Alt | E0,38 | E0,B8 | E0,11 | E0,F0,11 |
Правый Win | E0,5C | E0,DC | E0,27 | E0,F0,27 |
Menu | E0,5D | E0,DD | E0,2F | E0,F0,2F |
↵ Enter | 1C | 9C | 5A | F0,5A |
Esc | 01 | 81 | 76 | F0,76 |
F1 | 3B | BB | 05 | F0,05 |
F2 | 3C | BC | 06 | F0,06 |
F3 | 3D | BD | 04 | F0,04 |
F4 | 3E | BE | 0C | F0,0C |
F5 | 3F | BF | 03 | F0,03 |
F6 | 40 | C0 | 0B | F0,0B |
F7 | 41 | C1 | 83 | F0,83 |
F8 | 42 | C2 | 0A | F0,0A |
F9 | 43 | C3 | 01 | F0,01 |
F10 | 44 | C4 | 09 | F0,09 |
F11 | 57 | D7 | 78 | F0,78 |
F12 | 58 | D8 | 07 | F0,07 |
PrtScr | E0,2A,E0,37 | E0,B7,E0,AA | E0,12,E0,7C | E0,F0,7C,E0,F0,12 |
Scroll Lock | 46 | C6 | 7E | F0,7E |
Pause | E1,1D,45, E1,9D,C5 | — | E1,14,77,E1,F0,14,F0,77 | — |
Insert | E0,52 | E0,D2 | E0,70 | E0,F0,70 |
Home | 47 | C1 | E0,6C | E0,F0,6C |
End | E0,4F | E0,CF | E0,69 | E0,F0,69 |
Page Up | E0,49 | E0,C9 | E0,7D | E0,F0,7D |
Page Down | E0,51 | E0,D3 | E0,7A | E0,F0,7A |
Delete | E0,53 | E0,D3 | E0,71 | E0,F0,71 |
↑ | E0,48 | E0,C8 | E0,75 | E0,F0,75 |
← | E0,4B | E0,CB | E0,6B | E0,F0,6B |
↓ | E0,50 | 50,D0 | E0,70 | E0,F0,70 |
→ | E0,4D | E0,CD | E0,74 | E0,F0,74 |
Цифровая клавиатура | ||||
Num Lock | 45 | C5 | 77 | F0,77 |
/ | E0,35 | E0,B5 | E0,4A | E0,F0,4A |
* | 37 | B7 | 7C | F0,7C |
- | 4A | CA | 7B | F0,7B |
+ | 4E | CE | 79 | F0,79 |
↵ Enter | E0,1C | E0,9C | E0,5A | E0,F0,5A |
. | 53 | D3 | 71 | F0,71 |
0 | 52 | D2 | 70 | F0,70 |
1 | 4F | CF | 69 | F0,69 |
2 | 50 | D0 | 72 | F0,72 |
3 | 51 | D1 | 7A | F0,7A |
4 | 4B | CB | 6B | F0,6B |
5 | 4C | CC | 73 | F0,73 |
6 | 4D | CD | 74 | F0,74 |
7 | 47 | C7 | 6C | F0,6C |
8 | 48 | C8 | 75 | F0,75 |
9 | 49 | C9 | 7D | F0,7D |
Клавиши ACPI | ||||
Power | E0,5E | E0,DE | E0,37 | E0,F0,37 |
Sleep | E0,5F | E0,DF | E0,3F | E0,F0,3F |
Wake | E0,63 | E0,E3 | E0,5E | E0,F0,5E |
Мультимедиа клавиши | ||||
Управление проигрывателем | ||||
Следующий трек | E0,19 | E0, 99 | E0, 4D | E0,F0,4D |
Предыдущий трек | E0,10 | E0, 90 | E0,15 | E0,F0,15 |
Остановить | E0,24 | E0,A4 | E0,3B | E0,F0,3B |
Проигрывать/пауза | E0,22 | E0,A2 | E0,3B | E0,F0,3B |
Звук вкл/откл | E0,20 | E0,A0 | E0,23 | E0,F0,23 |
Увеличить громкость | E0,30 | E0,B0 | E0,32 | E0,F0,32 |
Уменьшить громкость | E0,2E | E0,AE | E0,21 | E0,F0,21 |
Управление браузером | ||||
Поиск | E0,65 | E0,E5 | E0,10 | E0,F0,10 |
Домашняя страница | E0,32 | E0,B2 | E0,3A | E0,F0,3A |
Назад | E0,6A | E0,EA | E0,38 | E0,F0,38 |
Вперед | E0,69 | E0,E9 | E0,30 | E0,F0,30 |
Стоп | E0,68 | E0, E8 | E0,28 | E0,F0,28 |
Обновить | E0,67 | E0,E7 | E0,F0,20 | E0,F0,20 |
Закладки | E0,66 | E0, E6 | E0,18 | E0,F0,18 |
Управление приложениями | ||||
Media Select | E0,6D | E0,ED | E0,50 | E0,F0,50 |
Электронная почта | E0,6C | E0,EC | E0,48 | E0,F0,48 |
Калькулятор | E0,21 | E0,A1 | E0,2B | E0,F0,2B |
Мой компьютер | E0,6B | E0,EB | E0,40 | E0,F0,40 |
Cм. также
Ссылки
Скан-код — Википедия
Материал из Википедии — свободной энциклопедии
Скан-код (англ. scan code) — в IBM-совместимых компьютерах код, присвоенный каждой клавише, с помощью которого драйвер клавиатуры распознает, какая клавиша была нажата. При нажатии любой клавиши контроллер клавиатуры распознаёт клавишу и посылает её скан-код в порт 60h. При отпускании клавиши контроллер клавиатуры устаревшего формата IBM PC/XT посылает в тот же порт скан-код, увеличенный на 80h, а более нового формата IBM PC/AT — два байта: F0h и скан-код (скан-коды клавиатуры AT также отличаются от XT, см. таблицу). Некоторые клавиши генерируют не один, а несколько скан-кодов (так, правые Alt, Ctrl, ↵ Enter, обе ⊞ Win, а также ≣ Menu, Insert, Delete, Page Up, Page Down, Home, End, стрелки и все ACPI- и мультимедиа-клавиши генерируют два скан-кода, первый из которых — E0, клавиша PrtScr генерирует 4 скан-кода, а клавиша Pause — даже 6 скан-кодов). Каждый байт, записанный в порт 60h, генерирует аппаратное прерывание int 09h.
Скан-коды жёстко привязаны к каждой клавише на аппаратном уровне и не зависят ни от состояния индикаторов ⇪ Caps Lock, Num Lock и Scroll Lock, ни от состояния управляющих клавиш (⇧ Shift, Alt, Ctrl).
Скан-коды клавиш
Все скан-коды ниже даются в шестнадцатеричной системе.
Большинство скан-кодов на XT-клавиатуре соответствуют физическому местоположению клавиш, начиная с клавиш Esc (код 01) и цифровых клавиш 1-9 (коды 02-0A). К примеру, клавиши второго ряда (Tab ↹ Q W E R T Y U I O P [ ] ↵ Enter) имеют последовательные скан-коды 0F-1C (15-28 в десятичной системе).
На клавиатурах другой раскладки (например, AZERTY) скан-коды соответствуют расположению клавиш: так, у французского A скан-код как у американского Q. Преобразованием скан-кодов в коды нажатых клавиш занимается ОС или BIOS.
Клавиша | Код нажатия XT | Код отпускания XT | Код нажатия AT | Код отпускания AT |
---|---|---|---|---|
Основная клавиатура | ||||
A | 1E | 9E | 1C | F0,1C |
B | 30 | B0 | 32 | F0,32 |
C | 2E | AE | 21 | F0,21 |
D | 20 | A0 | 23 | F0,23 |
E | 12 | 92 | 24 | F0,24 |
F | 21 | A1 | 2B | F0,2B |
G | 22 | A2 | 34 | F0,34 |
H | 23 | A3 | 33 | F0,33 |
I | 17 | 97 | 43 | F0,43 |
J | 24 | A4 | 38 | F0,3B |
K | 25 | A5 | 42 | F0,42 |
L | 26 | A6 | 4B | F0,4B |
M | 32 | B2 | 3A | F0,3A |
N | 31 | B1 | 31 | F0,31 |
O | 18 | 98 | 44 | F0,44 |
P | 19 | 99 | 4D | F0,4D |
Q | 10 | 90 | 15 | F0,15 |
R | 13 | 93 | 2D | F0,2D |
S | 1F | 9F | 1B | F0,1B |
T | 14 | 94 | 2C | F0,2C |
U | 16 | 96 | 3C | F0,3C |
V | 2F | AF | 2A | F0,2A |
W | 11 | 91 | 1D | F0,1D |
X | 2D | AD | 22 | F0,22 |
Y | 15 | 95 | 35 | F0,35 |
Z | 2C | AC | 1A | F0,1A |
0 | 0B | 8B | 45 | F0,45 |
1 | 02 | 82 | 16 | F0,16 |
2 | 03 | 83 | 1E | F0,1E |
3 | 04 | 84 | 26 | F0,26 |
4 | 05 | 85 | 25 | F0,25 |
5 | 06 | 86 | 2E | F0,2E |
6 | 07 | 87 | 36 | F0,36 |
7 | 08 | 88 | 3D | F0,3D |
8 | 09 | 89 | 3E | F0,3E |
9 | 0A | 8A | 46 | F0,46 |
~ | 29 | 89 | 0E | F0,0E |
- | 0C | 8C | 4E | F0,4E |
= | 0D | 82 | 55 | F0,55 |
\ | 2B | AB | 5D | F0,5D |
[ | 1A | 9A | 54 | F0,54 |
] | 1B | 9B | 5B | F0,5B |
; | 27 | A7 | 4C | F0,4C |
' | 28 | A8 | 52 | F0,52 |
, | 33 | B3 | 41 | F0,41 |
. | 34 | B4 | 49 | F0,49 |
/ | 35 | B5 | 4A | F0,4A |
BS | 0E | 8E | 66 | F0,66 |
Space | 39 | B9 | 29 | F0,29 |
Tab ↹ | 0F | 8F | 0D | F0,0D |
⇪ Caps Lock | 3A | BA | 58 | F0,58 |
Левый ⇧ Shift | 2A | AA | 12 | F0,12 |
Левый Ctrl | 1D | 9D | 14 | F0,14 |
Левый Alt | 38 | B8 | 11 | F0,11 |
Левый ⊞ Win | E0,5B | E0,DB | E0,1F | E0,F0,1F |
Правый ⇧ Shift | 36 | B6 | 59 | F0,59 |
Правый Ctrl | E0,1D | E0,9D | E0,14 | E0,F0,14 |
Правый Alt | E0,38 | E0,B8 | E0,11 | E0,F0,11 |
Правый ⊞ Win | E0,5C | E0,DC | E0,27 | E0,F0,27 |
≣ Menu | E0,5D | E0,DD | E0,2F | E0,F0,2F |
↵ Enter | 1C | 9C | 5A | F0,5A |
Esc | 01 | 81 | 76 | F0,76 |
F1 | 3B | BB | 05 | F0,05 |
F2 | 3C | BC | 06 | F0,06 |
F3 | 3D | BD | 04 | F0,04 |
F4 | 3E | BE | 0C | F0,0C |
F5 | 3F | BF | 03 | F0,03 |
F6 | 40 | C0 | 0B | F0,0B |
F7 | 41 | C1 | 83 | F0,83 |
F8 | 42 | C2 | 0A | F0,0A |
F9 | 43 | C3 | 01 | F0,01 |
F10 | 44 | C4 | 09 | F0,09 |
F11 | 57 | D7 | 78 | F0,78 |
F12 | 58 | D8 | 07 | F0,07 |
PrtScr | E0,2A,E0,37 | E0,B7,E0,AA | E0,12,E0,7C | E0,F0,7C,E0,F0,12 |
Alt+PrtScr | 54 (вместо PrtScr, код для клавиши Alt генерируется отдельно) | D4 (вместо PrtScr, код для клавиши Alt генерируется отдельно) | ? | ? |
Ctrl+PrtScr, ⇧ Shift+PrtScr (SysReq) | E0,37 (вместо PrtScr, код для Ctrl или ⇧ Shift генерируется отдельно) | E0,B7 (вместо PrtScr, код для Ctrl или ⇧ Shift генерируется отдельно) | ? | ? |
Scroll Lock | 46 | C6 | 7E | F0,7E |
Pause | E1,1D,45, E1,9D,C5 | — | E1,14,77, E1,F0,14,F0,77 | — |
Ctrl+Break (Ctrl+Pause) | E0,46 (вместо Break, код для клавиши Ctrl генерируется отдельно) | E0,C6 (вместо Break, код для клавиши Ctrl генерируется отдельно) | ? | ? |
Insert | E0,52 | E0,D2 | E0,70 | E0,F0,70 |
Home | E0,47 | E0,C7 | E0,6C | E0,F0,6C |
End | E0,4F | E0,CF | E0,69 | E0,F0,69 |
Page Up | E0,49 | E0,C9 | E0,7D | E0,F0,7D |
Page Down | E0,51 | E0,D1 | E0,7A | E0,F0,7A |
Delete | E0,53 | E0,D3 | E0,71 | E0,F0,71 |
↑ | E0,48 | E0,C8 | E0,75 | E0,F0,75 |
← | E0,4B | E0,CB | E0,6B | E0,F0,6B |
↓ | E0,50 | E0,D0 | E0,72 | E0,F0,70 |
→ | E0,4D | E0,CD | E0,74 | E0,F0,74 |
Цифровая клавиатура | ||||
Num Lock | 45 | C5 | 77 | F0,77 |
/ | E0,35 | E0,B5 | E0,4A | E0,F0,4A |
* | 37 | B7 | 7C | F0,7C |
- | 4A | CA | 7B | F0,7B |
+ | 4E | CE | 79 | F0,79 |
↵ Enter | E0,1C | E0,9C | E0,5A | E0,F0,5A |
. | 53 | D3 | 71 | F0,71 |
0 | 52 | D2 | 70 | F0,70 |
1 | 4F | CF | 69 | F0,69 |
2 | 50 | D0 | 72 | F0,72 |
3 | 51 | D1 | 7A | F0,7A |
4 | 4B | CB | 6B | F0,6B |
5 | 4C | CC | 73 | F0,73 |
6 | 4D | CD | 74 | F0,74 |
7 | 47 | C7 | 6C | F0,6C |
8 | 48 | C8 | 75 | F0,75 |
9 | 49 | C9 | 7D | F0,7D |
Клавиши ACPI | ||||
Power | E0,5E | E0,DE | E0,37 | E0,F0,37 |
Sleep | E0,5F | E0,DF | E0,3F | E0,F0,3F |
Wake | E0,63 | E0,E3 | E0,5E | E0,F0,5E |
Мультимедиа клавиши | ||||
Управление проигрывателем | ||||
Следующий трек | E0,19 | E0, 99 | E0, 4D | E0,F0,4D |
Предыдущий трек | E0,10 | E0, 90 | E0,15 | E0,F0,15 |
Остановить | E0,24 | E0,A4 | E0,3B | E0,F0,3B |
Проигрывать/пауза | E0,22 | E0,A2 | E0,34 | E0,F0,3B |
Звук вкл/откл | E0,20 | E0,A0 | E0,23 | E0,F0,23 |
Увеличить громкость | E0,30 | E0,B0 | E0,32 | E0,F0,32 |
Уменьшить громкость | E0,2E | E0,AE | E0,21 | E0,F0,21 |
Управление браузером | ||||
Поиск | E0,65 | E0,E5 | E0,10 | E0,F0,10 |
Домашняя страница | E0,32 | E0,B2 | E0,3A | E0,F0,3A |
Назад | E0,6A | E0,EA | E0,38 | E0,F0,38 |
Вперед | E0,69 | E0,E9 | E0,30 | E0,F0,30 |
Стоп | E0,68 | E0, E8 | E0,28 | E0,F0,28 |
Обновить | E0,67 | E0,E7 | E0,20 | E0,F0,20 |
Закладки | E0,66 | E0, E6 | E0,18 | E0,F0,18 |
Управление приложениями | ||||
Media Select | E0,6D | E0,ED | E0,50 | E0,F0,50 |
Электронная почта | E0,6C | E0,EC | E0,48 | E0,F0,48 |
Калькулятор | E0,21 | E0,A1 | E0,2B | E0,F0,2B |
Мой компьютер | E0,6B | E0,EB | E0,40 | E0,F0,40 |
В чистом DOS клавиша Pause генерирует 6 скан-кодов при нажатии и не генерирует скан-кодов при удержании и отпускании. Под Windows же (в том числе и в VMware и DOSBox) клавиша Pause работает так же, как и любая другая: при нажатии и удержании генерирует скан-коды E1,1D,45, а при отпускании — E1,9D,C5.
Коды клавиш ↓ , ↑ , ← , → , Home , End , Page Up , Page Down , Insert , Delete могут содержать кроме указанных в таблице дополнительно: E0,2A — при нажатии (до основного кода), E0,AA — при отпускании (после основного кода). А при удержании клавиши ⇧ Shift наоборот: E0,AA — при нажатии (до основного кода), E0,2A — при отпускании (после основного кода), код клавиши ⇧ Shift при этом генерируется отдельно.
См. также
Ссылки
Номера клавиш и скан-коды клавиатуры
При нажатии клавиши интегрированный в клавиатуру процессор вычисляет координаты нажатой клавиши в матрице. Далее он отправляет материнской плате пакет данных, в котором содержится скан-код используемой клавиши.
Это принято называть кодом активизации. Когда клавиша отпущена, генерируется код останова, которые указывает, что клавиша вернулась в исходное положение. Код останова равен коду активизации плюс 80h. К примеру, если код активизации 1Eh (клавиша «A»), то код останова будет равен 9Eh. Данные коды необходимы для определения нажатой клавиши (или комбинации клавиш).
В компьютерах AT контролер, установленный в клавиатуре, преобразует сгенерированный скан-код в один из скан-кодов, предусмотренных в системе, и отправляет его центральному процессору. Иногда необходимо знать данные скан-коды, особенно в процессе поиска неисправностей в клавиатуре или если необходимо считать скан-код в приложении.
Если клавиша выходит из строя или «залипает», программа диагностики, например процедура POST, обычно выдает ее скан-код. Это означает, что идентифицировать конкретную клавишу придется именно по данному коду.
В клавиатурах IBM каждая клавиша имеет уникальный номер, что дает возможность отличать ее от других. Данные номера необходимо знать для идентификации клавиши на зарубежных клавиатурах, поскольку она может иметь другие символы. В большинстве других моделях и в расширенных клавиатурах убрана одна из клавиш (№29), но добавлены две другие (№45 и №42). В итоге общее их количество увеличилось до 102.
Существует большое количество «горячих» клавиш, которые в клавиатурах USB и расширенных клавиатурах могут использоваться для запуска определенных операций (например, переход в спящий режим, запуск обозревателя, регулировка уровня громкости и так далее), так и функций, назначенных пользователем. Все «горячие» клавиши обладают собственным скан-кодом.
Скан-код — Википедия
Материал из Википедии — свободной энциклопедии
Скан-код (англ. scan code) — в IBM-совместимых компьютерах код, присвоенный каждой клавише, с помощью которого драйвер клавиатуры распознает, какая клавиша была нажата. При нажатии любой клавиши контроллер клавиатуры распознаёт клавишу и посылает её скан-код в порт 60h. При отпускании клавиши контроллер клавиатуры устаревшего формата IBM PC/XT посылает в тот же порт скан-код, увеличенный на 80h, а более нового формата IBM PC/AT — два байта: F0h и скан-код (скан-коды клавиатуры AT также отличаются от XT, см. таблицу). Некоторые клавиши генерируют не один, а несколько скан-кодов (так, правые Alt, Ctrl, ↵ Enter, обе ⊞ Win, а также ≣ Menu, Insert, Delete, Page Up, Page Down, Home, End, стрелки и все ACPI- и мультимедиа-клавиши генерируют два скан-кода, первый из которых — E0, клавиша PrtScr генерирует 4 скан-кода, а клавиша Pause — даже 6 скан-кодов). Каждый байт, записанный в порт 60h, генерирует аппаратное прерывание int 09h.
Скан-коды жёстко привязаны к каждой клавише на аппаратном уровне и не зависят ни от состояния индикаторов ⇪ Caps Lock, Num Lock и Scroll Lock, ни от состояния управляющих клавиш (⇧ Shift, Alt, Ctrl).
Скан-коды клавиш
Все скан-коды ниже даются в шестнадцатеричной системе.
Большинство скан-кодов на XT-клавиатуре соответствуют физическому местоположению клавиш, начиная с клавиш Esc (код 01) и цифровых клавиш 1-9 (коды 02-0A). К примеру, клавиши второго ряда (Tab ↹ Q W E R T Y U I O P [ ] ↵ Enter) имеют последовательные скан-коды 0F-1C (15-28 в десятичной системе).
На клавиатурах другой раскладки (например, AZERTY) скан-коды соответствуют расположению клавиш: так, у французского A скан-код как у американского Q. Преобразованием скан-кодов в коды нажатых клавиш занимается ОС или BIOS.
Клавиша | Код нажатия XT | Код отпускания XT | Код нажатия AT | Код отпускания AT |
---|---|---|---|---|
Основная клавиатура | ||||
A | 1E | 9E | 1C | F0,1C |
B | 30 | B0 | 32 | F0,32 |
C | 2E | AE | 21 | F0,21 |
D | 20 | A0 | 23 | F0,23 |
E | 12 | 92 | 24 | F0,24 |
F | 21 | A1 | 2B | F0,2B |
G | 22 | A2 | 34 | F0,34 |
H | 23 | A3 | 33 | F0,33 |
I | 17 | 97 | 43 | F0,43 |
J | 24 | A4 | 38 | F0,3B |
K | 25 | A5 | 42 | F0,42 |
L | 26 | A6 | 4B | F0,4B |
M | 32 | B2 | 3A | F0,3A |
N | 31 | B1 | 31 | F0,31 |
O | 18 | 98 | 44 | F0,44 |
P | 19 | 99 | 4D | F0,4D |
Q | 10 | 90 | 15 | F0,15 |
R | 13 | 93 | 2D | F0,2D |
S | 1F | 9F | 1B | F0,1B |
T | 14 | 94 | 2C | F0,2C |
U | 16 | 96 | 3C | F0,3C |
V | 2F | AF | 2A | F0,2A |
W | 11 | 91 | 1D | F0,1D |
X | 2D | AD | 22 | F0,22 |
Y | 15 | 95 | 35 | F0,35 |
Z | 2C | AC | 1A | F0,1A |
0 | 0B | 8B | 45 | F0,45 |
1 | 02 | 82 | 16 | F0,16 |
2 | 03 | 83 | 1E | F0,1E |
3 | 04 | 84 | 26 | F0,26 |
4 | 05 | 85 | 25 | F0,25 |
5 | 06 | 86 | 2E | F0,2E |
6 | 07 | 87 | 36 | F0,36 |
7 | 08 | 88 | 3D | F0,3D |
8 | 09 | 89 | 3E | F0,3E |
9 | 0A | 8A | 46 | F0,46 |
~ | 29 | 89 | 0E | F0,0E |
- | 0C | 8C | 4E | F0,4E |
= | 0D | 82 | 55 | F0,55 |
\ | 2B | AB | 5D | F0,5D |
[ | 1A | 9A | 54 | F0,54 |
] | 1B | 9B | 5B | F0,5B |
; | 27 | A7 | 4C | F0,4C |
' | 28 | A8 | 52 | F0,52 |
, | 33 | B3 | 41 | F0,41 |
. | 34 | B4 | 49 | F0,49 |
/ | 35 | B5 | 4A | F0,4A |
BS | 0E | 8E | 66 | F0,66 |
Space | 39 | B9 | 29 | F0,29 |
Tab ↹ | 0F | 8F | 0D | F0,0D |
⇪ Caps Lock | 3A | BA | 58 | F0,58 |
Левый ⇧ Shift | 2A | AA | 12 | F0,12 |
Левый Ctrl | 1D | 9D | 14 | F0,14 |
Левый Alt | 38 | B8 | 11 | F0,11 |
Левый ⊞ Win | E0,5B | E0,DB | E0,1F | E0,F0,1F |
Правый ⇧ Shift | 36 | B6 | 59 | F0,59 |
Правый Ctrl | E0,1D | E0,9D | E0,14 | E0,F0,14 |
Правый Alt | E0,38 | E0,B8 | E0,11 | E0,F0,11 |
Правый ⊞ Win | E0,5C | E0,DC | E0,27 | E0,F0,27 |
≣ Menu | E0,5D | E0,DD | E0,2F | E0,F0,2F |
↵ Enter | 1C | 9C | 5A | F0,5A |
Esc | 01 | 81 | 76 | F0,76 |
F1 | 3B | BB | 05 | F0,05 |
F2 | 3C | BC | 06 | F0,06 |
F3 | 3D | BD | 04 | F0,04 |
F4 | 3E | BE | 0C | F0,0C |
F5 | 3F | BF | 03 | F0,03 |
F6 | 40 | C0 | 0B | F0,0B |
F7 | 41 | C1 | 83 | F0,83 |
F8 | 42 | C2 | 0A | F0,0A |
F9 | 43 | C3 | 01 | F0,01 |
F10 | 44 | C4 | 09 | F0,09 |
F11 | 57 | D7 | 78 | F0,78 |
F12 | 58 | D8 | 07 | F0,07 |
PrtScr | E0,2A,E0,37 | E0,B7,E0,AA | E0,12,E0,7C | E0,F0,7C,E0,F0,12 |
Alt+PrtScr | 54 (вместо PrtScr, код для клавиши Alt генерируется отдельно) | D4 (вместо PrtScr, код для клавиши Alt генерируется отдельно) | ? | ? |
Ctrl+PrtScr, ⇧ Shift+PrtScr (SysReq) | E0,37 (вместо PrtScr, код для Ctrl или ⇧ Shift генерируется отдельно) | E0,B7 (вместо PrtScr, код для Ctrl или ⇧ Shift генерируется отдельно) | ? | ? |
Scroll Lock | 46 | C6 | 7E | F0,7E |
Pause | E1,1D,45, E1,9D,C5 | — | E1,14,77, E1,F0,14,F0,77 | — |
Ctrl+Break (Ctrl+Pause) | E0,46 (вместо Break, код для клавиши Ctrl генерируется отдельно) | E0,C6 (вместо Break, код для клавиши Ctrl генерируется отдельно) | ? | ? |
Insert | E0,52 | E0,D2 | E0,70 | E0,F0,70 |
Home | E0,47 | E0,C7 | E0,6C | E0,F0,6C |
End | E0,4F | E0,CF | E0,69 | E0,F0,69 |
Page Up | E0,49 | E0,C9 | E0,7D | E0,F0,7D |
Page Down | E0,51 | E0,D1 | E0,7A | E0,F0,7A |
Delete | E0,53 | E0,D3 | E0,71 | E0,F0,71 |
↑ | E0,48 | E0,C8 | E0,75 | E0,F0,75 |
← | E0,4B | E0,CB | E0,6B | E0,F0,6B |
↓ | E0,50 | E0,D0 | E0,72 | E0,F0,70 |
→ | E0,4D | E0,CD | E0,74 | E0,F0,74 |
Цифровая клавиатура | ||||
Num Lock | 45 | C5 | 77 | F0,77 |
/ | E0,35 | E0,B5 | E0,4A | E0,F0,4A |
* | 37 | B7 | 7C | F0,7C |
- | 4A | CA | 7B | F0,7B |
+ | 4E | CE | 79 | F0,79 |
↵ Enter | E0,1C | E0,9C | E0,5A | E0,F0,5A |
. | 53 | D3 | 71 | F0,71 |
0 | 52 | D2 | 70 | F0,70 |
1 | 4F | CF | 69 | F0,69 |
2 | 50 | D0 | 72 | F0,72 |
3 | 51 | D1 | 7A | F0,7A |
4 | 4B | CB | 6B | F0,6B |
5 | 4C | CC | 73 | F0,73 |
6 | 4D | CD | 74 | F0,74 |
7 | 47 | C7 | 6C | F0,6C |
8 | 48 | C8 | 75 | F0,75 |
9 | 49 | C9 | 7D | F0,7D |
Клавиши ACPI | ||||
Power | E0,5E | E0,DE | E0,37 | E0,F0,37 |
Sleep | E0,5F | E0,DF | E0,3F | E0,F0,3F |
Wake | E0,63 | E0,E3 | E0,5E | E0,F0,5E |
Мультимедиа клавиши | ||||
Управление проигрывателем | ||||
Следующий трек | E0,19 | E0, 99 | E0, 4D | E0,F0,4D |
Предыдущий трек | E0,10 | E0, 90 | E0,15 | E0,F0,15 |
Остановить | E0,24 | E0,A4 | E0,3B | E0,F0,3B |
Проигрывать/пауза | E0,22 | E0,A2 | E0,34 | E0,F0,3B |
Звук вкл/откл | E0,20 | E0,A0 | E0,23 | E0,F0,23 |
Увеличить громкость | E0,30 | E0,B0 | E0,32 | E0,F0,32 |
Уменьшить громкость | E0,2E | E0,AE | E0,21 | E0,F0,21 |
Управление браузером | ||||
Поиск | E0,65 | E0,E5 | E0,10 | E0,F0,10 |
Домашняя страница | E0,32 | E0,B2 | E0,3A | E0,F0,3A |
Назад | E0,6A | E0,EA | E0,38 | E0,F0,38 |
Вперед | E0,69 | E0,E9 | E0,30 | E0,F0,30 |
Стоп | E0,68 | E0, E8 | E0,28 | E0,F0,28 |
Обновить | E0,67 | E0,E7 | E0,20 | E0,F0,20 |
Закладки | E0,66 | E0, E6 | E0,18 | E0,F0,18 |
Управление приложениями | ||||
Media Select | E0,6D | E0,ED | E0,50 | E0,F0,50 |
Электронная почта | E0,6C | E0,EC | E0,48 | E0,F0,48 |
Калькулятор | E0,21 | E0,A1 | E0,2B | E0,F0,2B |
Мой компьютер | E0,6B | E0,EB | E0,40 | E0,F0,40 |
В чистом DOS клавиша Pause генерирует 6 скан-кодов при нажатии и не генерирует скан-кодов при удержании и отпускании. Под Windows же (в том числе и в VMware и DOSBox) клавиша Pause работает так же, как и любая другая: при нажатии и удержании генерирует скан-коды E1,1D,45, а при отпускании — E1,9D,C5.
Коды клавиш ↓ , ↑ , ← , → , Home , End , Page Up , Page Down , Insert , Delete могут содержать кроме указанных в таблице дополнительно: E0,2A — при нажатии (до основного кода), E0,AA — при отпускании (после основного кода). А при удержании клавиши ⇧ Shift наоборот: E0,AA — при нажатии (до основного кода), E0,2A — при отпускании (после основного кода), код клавиши ⇧ Shift при этом генерируется отдельно.
См. также
Ссылки
Скан-коды клавиатуры
Функциональные клавиши | ||
Клавиша | Коды | |
DEC | HEX | |
F1 | 59 | 3B |
F2 | 60 | 3C |
F3 | 61 | 3D |
F4 | 62 | 3E |
F5 | 63 | 3F |
F6 | 64 | 40 |
F7 | 65 | 41 |
F8 | 66 | 42 |
F9 | 67 | 43 |
F10 | 68 | 44 |
F11 | 87 | 57 |
F12 | 88 | 58 |
Упрвляющие клавиши | ||
Клавиша | Коды | |
DEC | HEX | |
ESC | 1 | 01 |
PrintScreen | 55 | 37 |
ScrollLock | 70 | 46 |
CapsLock | 58 | 3A |
NumLock | 325 | 145 |
BackSpace | 14 | 0E |
Tab | 15 | 0F |
Enter | 28 | 1C |
Left Ctrl | 29 | 1D |
Right Ctrl | 285 | 11D |
Left Shift | 42 | 2A |
Right Shift | 54 | 36 |
Alt* | 56 | 38 |
Буквенно-цифровая клавиатура | ||
Клавиша | Коды | |
DEC | HEX | |
` | 41 | 29 |
1 | 2 | 02 |
2 | 3 | 03 |
3 | 4 | 04 |
5 | 6 | 06 |
6 | 7 | 07 |
7 | 8 | 08 |
8 | 9 | 09 |
9 | 10 | 0A |
0 | 11 | 0B |
– | 12 | 0C |
= | 13 | 0D |
\ | 43 | 2B |
q | 16 | 10 |
w | 17 | 11 |
e | 18 | 12 |
r | 19 | 13 |
t | 20 | 14 |
y | 21 | 15 |
u | 22 | 16 |
i | 23 | 17 |
o | 24 | 18 |
p | 25 | 19 |
[ | 26 | 1A |
] | 27 | 1B |
a | 30 | 1E |
s | 31 | 1F |
d | 32 | 20 |
f | 33 | 21 |
g | 34 | 22 |
h | 35 | 23 |
j | 36 | 24 |
k | 37 | 25 |
l | 38 | 26 |
; | 39 | 27 |
‘ | 40 | 28 |
z | 44 | 2C |
x | 45 | 2D |
c | 46 | 2E |
v | 47 | 2F |
b | 48 | 30 |
n | 49 | 31 |
m | 50 | 32 |
, | 51 | 33 |
. | 52 | 34 |
/ | 53 | 35 |
Пробел | 57 | 39 |
Дополнительная клавиатура | ||
Клавиша | Коды | |
DEC | HEX | |
Insert | 338 | 152 |
Delete | 339 | 153 |
Home | 327 | 147 |
End | 335 | 14F |
PageUp | 329 | 149 |
PageDown | 337 | 151 |
Up | 328 | 148 |
Down | 336 | 150 |
Left | 331 | 14B |
Right | 333 | 14D |
Цифровая клавиатура | ||
Клавиша | Коды | |
DEC | HEX | |
/ | 309 | 135 |
* | 55 | 37 |
– | 74 | 4A |
+ | 78 | 4E |
Enter | 284 | 11C |
0 | 82 | 52 |
1 | 79 | 4F |
2 | 80 | 50 |
3 | 81 | 51 |
4 | 75 | 4B |
5 | 76 | 4C |
6 | 77 | 4D |
7 | 71 | 47 |
8 | 72 | 48 |
9 | 73 | 49 |
Источник: http://www.ntlib.chat.ru/ware/tables/scan.htm
коды сканирования клавиатуры
Коды сканирования клавиатурыкоды сканирования клавиатуры
Специальные физические ключи кодируются кодами сканирования DOS для этих ключей во втором байте типа TKeyEvent. Полный список кодов сканирования можно найти в таблице ниже. Это список ключей, который используется механизмом трансляции событий по умолчанию. При написании драйвера клавиатуры либо эти константы должны возвращаться различными функциями событий клавиш, либо драйвер должен реализовывать перехват TranslateKeyEvent .
код | Ключ | код | Ключ | код | Ключ |
---|---|---|---|---|---|
00 | NoKey | 3D | F3 | 70 | ALT-F9 |
01 | ALT-Esc | 3E | F4 | 71 | ALT-F10 |
02 | ALT-Space | 3F | F5 | 72 | CTRL-PrtSc |
04 | CTRL-Ins | 40 | F6 | 73 | CTRL-левый |
05 | SHIFT-Ins | 41 | F7 | 74 | CTRL-правый |
06 | CTRL-Del | 42 | F8 | 75 | CTRL-конец |
07 | SHIFT-Del | 43 | F9 | 76 | CTRL-PgDn |
08 | ALT-Back | 44 | F10 | 77 | CTRL-Home |
09 | ALT-SHIFT-Back | 47 | Дом | 78 | ALT-1 |
0F | SHIFT-Tab | 48 | до | 79 | ALT-2 |
10 | ALT-Q | 49 | PgUp | 7А | ALT-3 |
11 | ALT-W | 4B | осталось | 7B | ALT-4 |
12 | ALT-E | 4C | Центр | 7С | ALT-5 |
13 | ALT-R | 4D | Право | 7D | ALT-6 |
14 | ALT-T | 4E | ALT-GrayPlus | 7E | ALT-7 |
15 | ALT-Y | 4F | конец | 7F | ALT-8 |
16 | ALT-U | 50 | Вниз | 80 | ALT-9 |
17 | ALT-I | 51 | пгд | 81 | ALT-0 |
18 | ALT-O | 52 | Ins | 82 | ALT-Минус |
19 | ALT-P | 53 | Del | 83 | ALT-равно |
1A | ALT-LftBrack | 54 | SHIFT-F1 | 84 | CTRL-PgUp |
1B | ALT-RgtBrack | 55 | SHIFT-F2 | 85 | F11 |
1E | ALT-A | 56 | SHIFT-F3 | 86 | F12 |
1F | ALT-S | 57 | SHIFT-F4 | 87 | SHIFT-F11 |
20 | ALT-D | 58 | SHIFT-F5 | 88 | SHIFT-F12 |
21 | ALT-F | 59 | SHIFT-F6 | 89 | CTRL-F11 |
22 | ALT-G | 5А | SHIFT-F7 | 8А | CTRL-F12 |
23 | ALT-H | 5B | SHIFT-F8 | 8B | ALT-F11 |
24 | ALT-J | 5С | SHIFT-F9 | 8C | ALT-F12 |
25 | ALT-K | 5D | SHIFT-F10 | 8D | CTRL-Up |
26 | ALT-L | 5E | CTRL-F1 | 8E | CTRL-Минус |
27 | ALT-SemiCol | 5F | CTRL-F2 | 8F | ЦТРЛ-Центр |
28 | ALT-Цитата | 60 | CTRL-F3 | 90 | CTRL-GreyPlus |
29 | ALT-OpQuote | 61 | CTRL-F4 | 91 | CTRL-Вниз |
2B | ALT-BkSlash | 62 | CTRL-F5 | 94 | CTRL-Tab |
2C | ALT-Z | 63 | CTRL-F6 | 97 | ALT-Home |
2D | ALT-X | 64 | CTRL-F7 | 98 | ALT-Up |
2E | ALT-C | 65 | CTRL-F8 | 99 | ALT-PgUp |
2F | ALT-V | 66 | CTRL-F9 | 9B | ALT-левый |
30 | ALT-B | 67 | CTRL-F10 | 9D | ALT-Right |
31 | ALT-N | 68 | ALT-F1 | 9F | ALT-конец |
32 | ALT-M | 69 | ALT-F2 | A0 | ALT-Вниз |
33 | ALT-Comma | 6А | ALT-F3 | A1 | ALT-PgDn |
34 | ALT-период | 6B | ALT-F4 | A2 | ALT-Ins |
35 | ALT-Slash | 6С | ALT-F5 | A3 | ALT-Del |
37 | ALT-GreyAst | 6D | ALT-F6 | A5 | ALT-Tab |
3B | F1 | 6E | ALT-F7 | ||
3C | F2 | 6F | ALT-F8 |
Список кодов сканирования для специальных клавиш и комбинаций клавиш SHIFT, ALT и CTRL можно найти в следующей таблице: Они предназначены только для быстрого ознакомления.
Ключ | код | SHIFT-ключCTRL-ключ | Alt-Key | |
---|---|---|---|---|
NoKey | 00 | |||
F1 | 3B | 54 | 5E | 68 |
F2 | 3C | 55 | 5F | 69 |
F3 | 3D | 56 | 60 | 6А |
F4 | 3E | 57 | 61 | 6B |
F5 | 3F | 58 | 62 | 6С |
F6 | 40 | 59 | 63 | 6D |
F7 | 41 | 5А | 64 | 6E |
F8 | 42 | 5B | 65 | 6F |
F9 | 43 | 5С | 66 | 70 |
F10 | 44 | 5D | 67 | 71 |
F11 | 85 | 87 | 89 | 8B |
F12 | 86 | 88 | 8А | 8C |
Дом | 47 | 77 | 97 | |
до | 48 | 8D | 98 | |
PgUp | 49 | 84 | 99 | |
осталось | 4B | 73 | 9B | |
Центр | 4C | 8F | ||
Право | 4D | 74 | 9D | |
конец | 4F | 75 | 9F | |
Вниз | 50 | 91 | A0 | |
пгд | 51 | 76 | A1 | |
Ins | 52 | 05 | 04 | A2 |
Del | 53 | 07 | 06 | A3 |
Tab | 8 | 0F | 94 | A5 |
GreyPlus | 90 | 4E |
,Коды сканирования клавиатуры
PS2 | Электронная документация по продуктам Altium
При нажатии клавиши на клавиатуре код отправляется на центральный процессор. С помощью справочных таблиц ASCII хост может определить функцию нажатой клавиши. Переданный код называется кодом сканирования и дополнительно подклассируется как код «make» в случае нажатия клавиши.
Если клавиша удерживается без отпускания, код создания для этой клавиши будет отправляться непрерывно в соответствии с определенной частотой автоповтора (типографской).Следует отметить, что если более чем одна клавиша нажата и удерживается нажатой, типовой режим применяется только к последней нажатой клавише.
При отпускании нажатой клавиши на хост отправляется дополнительный код сканирования, чтобы сообщить ему, что нажатая клавиша была отпущена. Этот дополнительный передаваемый код называется кодом прерывания.
Большинство кодов сканирования имеют длину в один байт, за исключением некоторых расширенных ключей (например, SHIFT, CTRL, PAUSE). Расширенные ключи распознаются по префиксу E0h к их кодам создания.
Соответствующий код прерывания для ключа состоит из префиксного байта F0h, за которым следует код make для этого ключа. Опять же, расширенные ключи являются исключением из этого правила, поскольку байт F0h помещается после байта E0h исходного кода make.
Ключ PAUSE является исключением из стандартных и расширенных правил ключей. Во-первых, его make-код имеет длину 8 байт и начинается с E1h, а не E0h. Во-вторых, у него нет кода разрыва.
Коды изготовления и разрыва всех клавиш на клавиатуре PS / 2 составляют набор кодов сканирования.Определено три набора кодов сканирования, но только два набора кодов сканирования распознаются полностью и используются в качестве набора по умолчанию всеми современными клавиатурами PS / 2.
В таблице 1 перечислены все клавиши на стандартной клавиатуре PS / 2, а также их уникальные коды сканирования.
Таблица 1. Коды сканирования клавиатуры PS / 2 (набор кодов сканирования 2).Ключ | Scan Code | Ключ | Scan Code |
---|---|---|---|
ESC | 76 (F076) | К | 42 (F042) |
F1 | 05 (F005) | L | 4B (F04B) |
F2 | 06 (F006) | ; | 4C (F04C) |
F3 | 04 (F004) | ‘ | 52 (F052) |
F4 | 0C (F00C) | Введите | 5А (F05A) |
F5 | 03 (F003) | Сдвиг (влево) | 12 (F012) |
F6 | 0B (F00B) | Z | 1A (F01A) |
F7 | 83 (F083) | X | 22 (F022) |
F8 | 0A (F00A) | C | 21 (F021) |
F9 | 01 (F001) | В | 2A (F02A) |
F10 | 09 (F009) | B | 32 (F032) |
F11 | 78 (F078) | N | 31 (F031) |
F12 | 07 (F007) | М | 3A (F03A) |
Prt Scr | E012E07C (E0F07CE0F012) | , | 41 (F041) |
Scroll Lock | 7E (F07E) | . | 49 (F049) |
Пауза / Перерыв | E11477E1F014E077 (Нет) | / | 4A (F04A) |
` | 0E (F00E) | Сдвиг (справа) | 59 (F059) |
1 | 16 (F016) | Ctrl (слева) | 14 (F014) |
2 | 1E (F01E) | Окна (слева) | E01F (E0F01F) |
3 | 26 (F026) | Alt (слева) | 11 (F011) |
4 | 25 (F025) | Пробел | 29 (F029) |
5 | 2E (F02E) | Alt (справа) | E011 (E0F011) |
6 | 36 (F036) | Окна (справа) | E027 (E0F027) |
7 | 3D (F03D) | Меню | E02F (E0F02F) |
8 | 3E (F03E) | Ctrl (справа) | E014 (E0F014) |
9 | 46 (F046) | Вставка | E070 (E0F070) |
0 | 45 (F045) | Дом | E06C (E0F06C) |
– | 4E (F04E) | Page Up | E07D (E0F07D) |
= | 55 (F055) | Удалить | E071 (E0F071) |
Backspace | 66 (F066) | Конец | E069 (E0F069) |
Вкладка | 0D (F00D) | Page Down | E07A (E0F07A) |
Q | 15 (F015) | Стрелка вверх | E075 (E0F075) |
W | 1D (F01D) | Стрелка влево | E06B (E0F06B) |
E | 24 (F024) | Стрелка вниз | E072 (E0F072) |
R | 2D (F02D) | Стрелка вправо | E074 (E0F074) |
Т | 2C (F02C) | Num Lock | 77 (F077) |
Y | 35 (F035) | / | E04A (E0F04A) |
U | 3C (F03C) | * | 7C (F07C) |
I | 43 (F043) | – | 7B (F07B) |
O | 44 (F044) | 7 | 6C (F06C) |
P | 4D (F04D) | 8 | 75 (F075) |
[ | 54 (F054) | 9 | 7D (F07D) |
] | 5B (F05B) | + | 79 (F079) |
\ | 5D (F05D) | 4 | 6B (F06B) |
Caps Lock | 58 (F058) | 5 | 73 (F073) |
A | 1C (F01C) | 6 | 74 (F074) |
S | 1B (F01B) | 1 | 69 (F069) |
D | 23 (F023) | 2 | 72 (F072) |
F | 2B (F02B) | 3 | 7А (F07A) |
G | 34 (F034) | 0 | 70 (F070) |
H | 33 (F033) | . | 71 (F071) |
J | 3B (F03B) | Введите | E05A (E0F05A) |
Коды сканирования клавиатуры ПК
Коды сканирования клавиатуры ПКPhil Storrs PC Hardware книга
Значения кода сканирования, генерируемые клавиатурой ПК
Спасибо Крейгу Пикоку, за вышеприведенные диаграммы. Крэйг поддерживает хорошую страницу взаимодействия с ПК по адресу: http://www.senet.com.au/~cpeacock/
скан-код | Базовый корпус | Верхний регистр | скан-код | Базовый корпус | Верхний регистр | скан-код | Базовый корпус | Верхний регистр |
---|---|---|---|---|---|---|---|---|
29 | ` | ~ | 02 | 1 | ! | 03 | 2 | @ |
04 | 3 | # | 05 | 4 | $ | 06 | 5 | % |
07 | 6 | ^ | 08 | 7 | и | 09 | 8 | * |
0А | 9 | ( | 0B | 0 | ) | 0C | – | _ |
0D | = | + | 0E | Backspace | Backspace | 0F | Tab | Back Tab |
10 | кв | Q | 11 | Вт | Вт | 12 | и | E |
13 | р | R | 14 | т | Т | 15 | и | Y |
16 | и | U | 17 | и | I | 18 | или | O |
19 | р | P | 1A | [ | { | 1B | ] | } |
2B | \ | | | 3A примечание 1 | Caps Lock | на | 1E | А | |
1F | с | S | 20 | д | D | 21 | f | F |
22 | г | G | 23 | ч | H | 24 | и | J |
25 | к | К | 26 | л | л | 27 | ; | : |
28 | ‘ | и | 2B note 2 | # | ~ | 1С | Введите | Введите |
2A примечание 1 | Сдвиг влево | на | D5 note 2 | \ | | | 2C | з | Z |
2D | x | X | 2E | с | C | 2F | v | В |
30 | b | B | 31 | n | N | 32 | м | М |
33 | , | & lt | 34 | & gt | 35 | / | ? | |
36 примечание 1 | Сдвиг вправо | на | 1D примечание 1 | левый Ctrl | на | 38 примечание 1 | левый альт | на |
39 | Пробел | Пробел | E0,38 примечание 1 | правый альт | на | E0,1D примечание 1 | вправо Ctrl | на |
E0,52 | Вставка | на | E0,53 | Удалить | на | E0,4B | Стрелка влево | на |
E0,47 | Дом | на | E0,4F | Конец | на | E0,48 | Стрелка вверх | на |
E0,49 | Pg Up | на | E0,51 | Pg Dn | на | E0,4D | Стрелка вправо | на |
45, C5 примечание 1 | Num Lock | на | 47 | Клавиатура 7 | Дом | 4B | Клавиатура 4 | Стрелка влево |
4F | Клавиатура 1 | Конец | E0,35 | клавиатура / | клавиатура / | 48 | Клавиатура 8 | Стрелка вверх |
4С | Клавиатура 5 | на | 50 | Клавиатура 2 | Dn Arrow | 52 | Клавиатура 0 | Вставка |
E0,37 | Клавиатура * | Клавиатура * | 49 | Клавиатура 9 | Pg Up | 4D | Клавиатура 6 | Стрелка вправо |
51 | Клавиатура 3 | Pg Dn | 53 | Клавиатура. | Удалить | 4А | Клавиатура – | Клавиатура – |
4E | Клавиатура + | Клавиатура + | E0,1C | Клавиатура Enter | Клавиатура Enter | 01 | Побег | Побег |
3B | F1 | примечание 3 | 3C | F2 | примечание 3 | 3D | F3 | примечание 3 |
3E | F4 | примечание 3 | 3F | F5 | примечание 3 | 40 | F6 | примечание 3 |
41 | F7 | примечание 3 | 42 | F8 | примечание 3 | 43 | F9 | примечание 3 |
44 | F10 | примечание 3 | D9 | F11 | примечание 3 | DA | F12 | примечание 3 |
2А, 37 | Prnt, Scrn | на | 46 | Scroll Lock | на |
Каждая клавиша на клавиатуре ПК имеет код сканирования, а не код ASCII, связанный с ней.В приведенной выше таблице указан код сканирования для каждой клавиши на 101-клавишной клавиатуре ПК.
Чип процессора клавиатуры, находящийся внутри блока клавиатуры, сканирует матрицу клавиш и при нажатии клавиши отправляет код сканирования для нажатой клавиши в схему интерфейса клавиатуры на системной плате компьютера. Схема интерфейса клавиатуры генерирует аппаратное прерывание, которое вызывает процедуру обслуживания клавиатуры в действие. Сервисная программа клавиатуры обрабатывает код сканирования, просматривая два байта состояния, которые отслеживают клавиши состояния сдвига, и помещает двухбайтовый код в область буфера клавиатуры в ОЗУ.Если нажатая клавиша была символом ASCII, два байта данных сохраняются с кодом ASCII в качестве основного байта, а код сканирования нажатой клавиши – в качестве вспомогательного байта.
,кодов сканирования клавиатуры
Коды сканирования клавиатурыInquisit записывает код сканирования ответа субъекта в столбце ответа. файла данных. Каждая клавиша на клавиатуре имеет уникальный код сканирования, указанный в таблице ниже.
Scancode | Клавиша клавиатуры |
---|---|
1 | ESC |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 4 |
6 | 5 |
7 | 6 |
8 | 7 |
9 | 8 |
10 | 9 |
11 | 0 |
12 | – |
13 | = |
14 | BS |
15 | Tab |
16 | Q |
17 | W |
18 | E |
19 | R |
20 | Т |
21 | Y |
22 | U |
23 | Я |
24 | O |
25 | P |
26 | [ |
27 | ] |
28 | Введите |
29 | CTRL |
30 | A |
31 | S |
32 | D |
33 | F |
34 | G |
35 | H |
36 | J |
37 | К |
38 | L |
39 | ; |
40 | |
41 | ` |
42 | LShift |
43 | \ |
44 | Z |
45 | X |
46 | C |
47 | V |
48 | B |
49 | N |
50 | М |
51 | |
52 | , |
53 | / |
54 | RShift |
55 | PrtSc |
56 | Alt |
57 | Космос |
58 | Caps |
59 | F1 |
60 | F2 |
61 | F3 |
62 | F4 |
63 | F5 |
64 | F6 |
65 | F7 |
66 | F8 |
67 | F9 |
68 | F10 |
69 | Номер |
70 | Свиток |
71 | Главная (7) |
72 | Up (8) |
73 | PgUp (9) |
74 | – |
75 | Левый (4) |
76 | Центр (5) |
77 | Право (6) |
78 | + |
79 | Конец (1) |
80 | Вниз (2) |
81 | PgDn (3) |
82 | Ins |
83 | Del |
,