Ремаппинг клавиш на клавиатуре / Habr
Всю свою жизнь был фанатом бесшумных, тонких, и красивых клавиатур и к моему удивлению обнаружил что таковых не так уж и много, из доступных в свободной продаже, — их единицы. Пришлось пользоваться «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]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,37,E0,5C,E0,00,00,00,00
habr.com
Скан-коды клавиатуры
Скан-код нажатойклавиши можно получить путем считывания его с порта 60hпри помощи командыIN. Скан-кодотпущеннойклавиши соответствует скан-коду нажатой клавиши с установленным старшим седьмым битом(OR 10000000b).
Подробнее об этом читайте в Главе 15.
Клавиша | Код | Клавиша | Код | Клавиша | Код | Клавиша | Код |
Esc | 01h | U | 16h | Right Shift | 36h | F6 | 40h |
1 ! | 02h | I | 17h | \ | | 2Bh | F7 | 41h |
2 @ | O | 18h | Z | 2Ch | F8 | 42h | |
3 # | 04h | P | 19h | X | 2Dh | F9 | 43h |
4 $ | 05h | [ { | 1Ah | C | 2Eh | F10 | 44h |
5 % | 06h | ] } | 1Bh | V | 2Fh | F11 | 57h |
6 ^ | 07h | Enter | 1Ch | B | 30h | F12 | 58h |
7 & | 08h | Ctrl | 1Dh | N | 31h | Num Lock | 45h |
8 * | 09h | A | 1Eh | M | 32h | Scroll Lock | 46h |
9 ( | 0Ah | S | 1Fh | , < | 33h | Home | 47h |
0 ) | 0Bh | D | 20h | . > | 34h | – | 48h |
– _ | 0Ch | F | 21h | / ? | 35h | PageUp | 49h |
= + | 0Dh | G | 22h | * * * | 37h | * – * | 4Ah |
BS | 0Eh | H | 23h | Alt | 38h | * + * | 4Eh |
Tab | 0Fh | J | 24h | Space | 39h | End | 4Fh |
Q | 10h | K | 25h | Caps Lock | 3Ah | PageDown | 51h |
W | 11h | L | 26h | F1 | 3Bh | Insert | 52h |
E | 12h | ; : | 27h | F2 | 3Ch | Delete | 53h |
R | 13h | ‘ “ | 28h | F3 | 3Dh | Left Win | 5Bh |
T | 14h | ` ~ | 29h | F4 | 3Eh | Right Win | 5Ch |
Y | 15h | Left Shift | 2Ah | F5 | 3Fh | Menu | 5Dh |
«Ассемблер? Это просто! Учимся программировать»
(С) Авторское право принадлежит Калашникову Олегу Александровичу ([email protected]).
studfiles.net
Скан-коды клавиатуры
Клавиша | Скан-код в 16-й СС | Клавиша | Скан-код в 16-й СС | Клавиша | Скан-код в 16-ой СС | Клавиша | Скан-код в 16-й СС |
Esc | 01 | U | 16 | | \ | 2B | F6 | 40 |
! 1 | 02 | I | 17 | Z | 2C | F7 | 41 |
@ 2 | 03 | O | 18 | X | 2D | F8 | 42 |
# 3 | 04 | P | 19 | C | 2E | F9 | 43 |
$ 4 | 05 | { [ | 1A | V | 2F | F10 | 44 |
% 5 | 06 | } ] | 1B | B | 30 | NumLock | 45 |
^ 6 | 07 | Enter | 1C | N | 31 | F11 | D9 |
& 7 | 08 | Ctrl | 1D | M | 32 | F12 | DA |
* 8 | 09 | A | 1E | < , | 33 | Home | 47 |
( 9 | 0A | S | 1F | > . | 34 | ↑ | 48 |
) 0 | 0B | D | 20 | ? / | 35 | PageUp | 49 |
_ – | 0C | F | 21 | правый Shift | 36 | серый – | 4A |
+ = | 0D | G | 22 | PrintScreen | 37 | ← | 4B |
BackSpace | 0E | H | 23 | Alt | 38 | 5 | 4C |
Tab | 0F | J | 24 | Пробел | 39 | → | 4D |
Q | 10 | K | 25 | CapsLock | 3A | серый + | 4E |
W | 11 | L | 26 | F1 | 3B | End | 4F |
E | 12 | : ; | 27 | F2 | 3C | ↓ | 50 |
R | 13 | ” ‘ | 28 | F3 | 3D | PageDown | 51 |
T | 14 | ~ ` | 29 | F4 | 3E | Insert | 52 |
Y | 15 | левый Shift | 2A | F5 | 3F | Delete | 53 |
В расширенных кодах первый байт (служебный байт) всегда равен нулю, а второй байт (информационный байт) представляет собой скан-код (табл. 12.3).
Таблица 12.3
Информационные байты расширенных кодов клавиатуры
Клавиша, комбинация клавиш | Код | Клавиша, комбинация клавиш | Код | Клавиша, комбинация клавиш | Код | Клавиша, комбинация клавиш | Код |
Alt + Q | 10 | F1 | 3B | Shift + F7 | 5A | Ctrl + → | 74 |
Alt + W | 11 | F2 | 3C | Shift + F8 | 5B | Ctrl + End | 75 |
Alt + E | 12 | F3 | 3D | Shift + F9 | 5C | Ctrl + PageUp | 76 |
Alt + R | 13 | F4 | 3E | Shift + F10 | 5D | Ctrl + Home | 77 |
Alt + T | 14 | F5 | 3F | Ctrl + F1 | 5E | Alt + 1 | 78 |
Alt + Y | 15 | F6 | 40 | Ctrl + F2 | 5F | Alt + 2 | 79 |
Alt + U | 16 | F7 | 41 | Ctrl + F3 | 60 | Alt + 3 | 7A |
Alt + I | 17 | F8 | 42 | Ctrl + F4 | 61 | Alt + 4 | 7B |
Alt + O | 18 | F9 | 43 | Ctrl + F5 | 62 | Alt + 5 | 7C |
Alt + P | 19 | F10 | 44 | 63 | Alt + 6 | 7D | |
Alt + A | 1E | Home | 47 | Ctrl + F7 | 64 | Alt + 7 | 7E |
Alt + S | 1F | ↑ | 48 | Ctrl + F8 | 65 | Alt + 8 | 7F |
Alt + D | 20 | PageUp | 49 | Ctrl + F9 | 66 | Alt + 9 | 80 |
Alt + F | 21 | ← | 4A | Ctrl + F10 | 67 | Alt + 0 | 81 |
Alt + G | 22 | → | 4D | Alt + F1 | 68 | Alt + – | 82 |
Alt + H | 23 | End | 4F | Alt + F2 | 69 | Alt + = | 83 |
Alt + J | 24 | ↓ | 50 | Alt + F3 | 6A | Ctrl + PageDown | 84 |
Alt + K | 25 | PageDown | 51 | Alt + F4 | 6B | F11 | 85 |
Alt + L | 26 | Insert | 52 | Alt + F5 | 6C | F12 | 86 |
Alt + Z | 2C | Delete | 53 | Alt + F6 | 6D | Shift + F11 | 87 |
Alt + X | 2D | Shift + F1 | 54 | Alt + F7 | 6E | Shift + F12 | 88 |
Alt + C | 2E | Shift + F2 | 55 | Alt + F8 | 6F | Ctrl + F11 | 89 |
Alt + V | 2F | Shift + F3 | 56 | Alt + F9 | 70 | Ctrl + F12 | 8A |
Alt + B | 30 | Shift + F4 | 57 | Alt + F10 | 71 | Alt + F11 | 8B |
Alt + N | 31 | Shift + F5 | 58 | Ctrl + PrtScr | 72 | Alt + F12 | 8C |
Alt + M | 32 | Shift + F6 | 59 | Ctrl + ← | 73 |
Для опроса содержимого буфера в модуле CRTприменяются функцииKeyPressed иReadKey. Первая функция имеет описание следующего вида:
Function KeyPressed : Boolean;
Она возвращает True, если в буфере содержится хотя бы один символ, иFalse, если буфер пуст.
Наиболее часто функция KeyPressedиспользуется в циклах ожидания нажатия на любую клавишу, в частности в виде конструкций:
а) Repeat until KeyPressed;
б) While not Keypressed do;
В обоих случаях процессор зацикливается, выполняя пустой оператор до нажатия любой клавиши. Если буфер содержит хотя бы один код (была нажата клавиша, т.е. KeyPressed = True), то цикл завершается и управление передается следующему за ним оператору.
Для корректного использования цикла ожидания буфер клавиатуры необходимо предварительно очищать от кодов случайно или ранее нажатых клавиш. Для этого используется функция ReadKey. Она описывается следующим образом:
Function ReadKey : char;
Эта функция извлекает код символа из буфера и возвращает его в программу без эхо-повтора символа на экран. Буфер организован в виде очереди по принципу “первым пришел – первым ушел” и рассчитан на хранение до 15 кодов.
Если буфер пуст, то функция ReadKeyприостанавливает выполнение программы до нажатия на любую клавишу кромеShift,Ctrl,Alt,CapsLock,NumLock,ScrollLock, т.е. позволяет отслеживать нажатие более широкого множества клавиш по сравнению сRead/ReadLn.
Применение ReadKeyпозволяет очистить буфер и в результате цикл ожидания нажатия клавиши становится надежным. Например, предыдущий цикл ожидания нажатия на любую клавишу при использованииReadKeyможно записать в следующем виде:
Var ch : char;
Begin . . . . . . . . . . . .
while KeyPressed do ch := ReadKey; {очистка буфера}
repeat until KeyPressed; {ожидание нажатия}
. . . . . . . . . . . .
End.
Каждое обращение к функции ReadKeyизвлекает один содержащийся там код. Если в двухбайтовом коде главный байт совпадает сASCII,ReadKeyвозвращает в программу только этот код, а скан-код отбрасывает. Если главный байт равен нулю, то после его считывания необходимо еще раз обратиться кReadKeyдля считывания вспомогательного байта расширенного кода. Например:
while KeyPresseddoch:=ReadKey; {очистка буфера}
ch:=ReadKey; {ожидание ввода и считывание
кода при нажатии клавиши}
ifch=# 0then begin ch:=ReadKey; {прием расширенного
кода}
. . . . . . . . . . . .
end;
Далее chанализируется обычно с помощью условного оператораifили оператораcase of.
studfiles.net
Скан-код – Howling Pixel
Скан-код (англ. 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.
Во всех операционных системах фирмы Microsoft, скан коды из набора 2 (AT) преобразуются в скан коды набора 1 (XT), и все приложения получают уже скан коды набора 1.[1]
Клавиша | Код нажатия 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 |
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,72 |
→ | 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,34 |
Звук вкл/откл | 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 при этом генерируется отдельно.
См. также
Ссылки
Fn (клавиша)Fn (сокр. от англ. function) — клавиша-модификатор, используемая на многих компьютерных клавиатурах (особенно ноутбучных), для объединения функций, обычно находящихся на отдельных кнопках. Может использоваться для эмуляции отсутствующих клавиш на компактных клавиатурах, для активации мультимедийных функций а также для активации различных функций, реализованных в клавиатуре аппаратно (подсветка, регулировка яркости экрана ноутбука и т.д.). Также клавиатура может оснащаться клавишей F-Lock, чтобы фиксировать клавиатуру в мультимедийном режиме.
Клавиатура IBM PCКлавиатура IBM PC — клавиатура IBM PC-совместимых компьютеров, ставшая стандартом де-факто для компьютерных клавиатур. К клавиатурам IBM PC относят две принципиально разные по протоколу обмена клавиатуры: 83-клавишную клавиатуру оригинального IBM PC, известную как XT-клавиатура, и клавиатуру IBM PC/AT, которая в свою очередь изначально предлагалась в 84-клавишном варианте с цифровым блоком, но позже была заменена 101-клавишной клавиатурой. В дальнейшем добавлялись новые клавиши, менялся способ подключения, но основной набор клавиш и скан-кодов оставался неизменным.
Компьютерная клавиатураКомпью́терная клавиату́ра — устройство, позволяющее пользователю вводить информацию в компьютер (устройство ввода). Представляет собой набор клавиш (кнопок), расположенных в определённом порядке.
СканСкан может означать:
Скан, Сидни Альфред (1870—1939) — британский садовод, ботаник и библиотекарь.
КСВ-2 «Скан» — устройство эвакуации для вертолета Ми-8, разработанное по требованию МЧС России
Т-скан — компьютерная система для клинической диагностики и анализа окклюзионных контактов.
На других языках
This page is based on a Wikipedia article written by authors
(here).
Text is available under the CC BY-SA 3.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.
howlingpixel.com
код – это… Что такое Скан-код?
Скан-код — код, присвоенный каждой клавише, с помощью которого драйвер клавиатуры распознает, какая клавиша была нажата. При нажатии любой клавиши контроллер клавиатуры распознаёт клавишу и посылает её скан-код в порт 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м. также
Ссылки
dic.academic.ru
Скан-код клавиши
Номер клавиши, посылаемый клавиатурным процессором, однозначно зависит от схемы клавиатурной матрицы, но не от обозначений, нанесенных на поверхность клавиш. Этот номер называется скан-кодом (Scan Code). Слово scan (“сканирование”), подчеркивает тот факт, что клавиатурный компьютер сканирует клавиатуру для поиска нажатой клавиши.
КодAscii нажатой клавиши
Обычно программе нужен не порядковый номер нажатой клавиши, а код, соответствующий обозначению на этой клавише (код ASCII).
Код ASCII не связан напрямую со скан-кодом, так как одной и той же клавише могут соответствовать несколько значений кода ASCII в зависимости от состояния других клавиш. Например, клавиша с обозначением «1» используется еще и для ввода символа «!» (если она была нажата вместе с клавишей<Shift>).
Поэтому все преобразования скан-кода в код ASCII выполняются программно. Как правило, в операционной системе MS-DOS эти преобразования выполняют модули BIOS. Для использования символов кириллицы эти модули расширяются клавиатурными драйверами, как входящими в состав локализованных версийMS-DOS, так и созданными в виде отдельных программ.
Режим автоповтора
Если нажать на клавишу и не отпускать ее, клавиатура перейдет в режим автоповтора. При этом в компьютер автоматически через некоторый период времени, называемый периодом автоповтора, посылается код нажатой клавиши. Режим автоповтора облегчает ввод с клавиатуры большого количества одинаковых символов.
Следует отметить, что клавиатура содержит внутренний 16-байтовый буфер, через который она осуществляет обмен данными с компьютером.
Типы клавиатур
До недавнего времени существовали три различных типа клавиатуры. Это клавиатура для компьютеров IBM PC/XT, 84-клавишная клавиатура для IBM PC/AT и 101-клавишная (расширенная) клавиатура для IBMPC/AT. Некоторые клавиатуры имеют переключатель режима работы (XT/AT), расположенный на нижней крышке. Он должен быть установлен в правильное положение.
После того как операционная система Microsoft Windows получила широкое распространение, специально для нее был создан новый тип клавиатуры. К обычной клавиатуре типа IBMPC/AT были добавлены две кнопки, первая из которых дублирует вызов менюStart, выполняемый при помощи левой клавиши мыши, а вторая – вызов того же меню при помощи правой клавиши мыши.
Порты для работы с клавиатурой
Назначение портов, предназначенных для работы с клавиатурой, зависят от типа компьютера.
КомпьютерIbm pc/xt
Для работы с клавиатурой типа IBM PC/XT используются порты с адресами 60h и 61h.
Порт 60h доступен только для чтения. После выполнения этой операции он содержит скан-код последней нажатой клавиши.
Порт 61h доступен как для чтения, так и для записи. Он управляет не только клавиатурой, но и другими устройствами компьютера, например, работой встроенного динамика. Если в старший бит порта 61h записать значение 1, клавиатура будет заблокирована, если 0 – разблокирована.
Так как порт 61h управляет не только клавиатурой, при изменении содержимого старшего бита необходимо сохранить состояние остальных битов этого порта. Для этого можно сначала выполнить чтение содержимого порта в регистр, изменить состояние старшего бита, затем выполнить запись нового значения в порт:
. . .
in al, 61h
or al, 80h
out 61h, al
. . .
studfiles.net
Сканкоды клавиш клавиатуры
Сканкоды клавиатуры являются условными кодам клавиш. Каждой клавише клавиатуры соответствует особый номер – сканкод. Именно сканкод передается по проводу в компьютер. Контроллер порта клавиатуры записывает сканкод в свой буфер и генерирует прерывание №9. Обработчик прерывания операционной системы читает порт ввода-вывода 0x60 и запоминает его в своем буфере, поскольку скан код может состоять из нескольких байт. Когда операционная система распознала последовательность байт, она генерирует соответствующий символ и отправляет его программе.
Сканкоды клавиш с буквами
Нажатие | Отпускание |
1C | F0 1C |
32 | F0 32 |
21 | F0 21 |
23 | F0 23 |
24 | F0 24 |
2B | F0 2B |
34 | F0 34 |
33 | F0 33 |
43 | F0 43 |
3B | F0 3B |
42 | F0 42 |
4B | F0 4B |
3A | F0 3A |
31 | F0 31 |
44 | F0 44 |
4D | F0 4D |
15 | F0 15 |
2D | F0 2D |
1B | F0 1B |
2C | F0 2C |
3C | F0 3C |
2A | F0 2A |
1D | F0 1D |
22 | F0 22 |
35 | F0 35 |
1A | F0 1A |
Сканкоды клавиш с цифрами
Нажатие | Отпускание |
45 | F0 45 |
16 | F0 16 |
1E | F0 1E |
26 | F0 26 |
25 | F0 25 |
2E | F0 2E |
36 | F0 36 |
3D | F0 3D |
3E | F0 3E |
46 | F0 46 |
0E | F0 0E |
4E | F0 4E |
55 | F0 55 |
5D | F0 5D |
cpubook.ru