Скан-код

Перейти к навигацииПерейти к поиску

Скан-код (англ. 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Код USB HID
Основная клавиатура
A1E9E1CF0,1C04
B30B032F0,3205
C2EAE21F0,2106
D20A023F0,2307
E129224F0,2408
F21A12BF0,2B09
G22A234F0,340A
H23A333F0,330B
I179743F0,430C
J24A43BF0,3B0D
K25A542F0,420E
L26A64BF0,4B0F
M32B23AF0,3A10
N31B131F0,3111
O189844F0,4412
P19994DF0,4D13
Q109015F0,1514
R13932DF0,2D15
S1F9F1BF0,1B16
T14942CF0,2C17
U16963CF0,3C18
V2FAF2AF0,2A19
W11911DF0,1D1A
X2DAD22F0,221B
Y159535F0,351C
Z2CAC1AF0,1A1D
00B8B45F0,4527
1028216F0,161E
203831EF0,1E1F
3048426F0,2620
4058525F0,2521
506862EF0,2E22
6078736F0,3623
708883DF0,3D24
809893EF0,3E25
90A8A46F0,4626
~29890EF0,0E35
-0C8C4EF0,4E2D
=0D8255F0,552E
\2BAB5DF0,5D31 или 64
[1A9A54F0,542F
]1B9B5BF0,5B30
;27A74CF0,4C33
'28A852F0,5234
,33B341F0,4136
.34B449F0,4937
/35B54AF0,4A38
BS0E8E66F0,662A
Space39B929F0,292C
Tab ↹0F8F0DF0,0D2B
⇪ Caps Lock3ABA58F0,5839
Левый ⇧ Shift2AAA12F0,12E1
Левый Ctrl1D9D14F0,14E0
Левый Alt38B811F0,11E2
Левый WinE0,5BE0,DBE0,1FE0,F0,1FE3
Правый ⇧ Shift36B659F0,59E5
Правый CtrlE0,1DE0,9DE0,14E0,F0,14E4
Правый AltE0,38E0,B8E0,11E0,F0,11E6
Правый WinE0,5CE0,DCE0,27E0,F0,27E7
≣ MenuE0,5DE0,DDE0,2FE0,F0,2F65
↵ Enter1C9C5AF0,5A28
Esc018176F0,7629
F13BBB05F0,053A
F23CBC06F0,063B
F33DBD04F0,043C
F43EBE0CF0,0C3D
F53FBF03F0,033E
F640C00BF0,0B3F
F741C183F0,8340
F842C20AF0,0A41
F943C301F0,0142
F1044C409F0,0943
F1157D778F0,7844
F1258D807F0,0745
PrtScrE0,2A,E0,37E0,B7,E0,AAE0,12,E0,7CE0,F0,7C,E0,F0,1246
Alt+PrtScr54 (вместо PrtScr,

код для клавиши Alt

генерируется отдельно)

D4 (вместо PrtScr,

код для клавиши Alt

генерируется отдельно)

? ?
Ctrl+PrtScr,

⇧ Shift+PrtScr

(SysReq)

E0,37 (вместо PrtScr,

код для Ctrl или ⇧ Shift

генерируется отдельно)

E0,B7 (вместо PrtScr,

код для Ctrl или ⇧ Shift

генерируется отдельно)

? ? 9A
Scroll Lock46C67EF0,7E47
PauseE1,1D,45, E1,9D,C5E1,14,77, E1,F0,14,F0,7748
Ctrl+Break

(Ctrl+Pause)

E0,46 (вместо Break,

код для клавиши Ctrl

генерируется отдельно)

E0,C6 (вместо Break,

код для клавиши Ctrl

генерируется отдельно)

? ?
InsertE0,52E0,D2E0,70E0,F0,7049
HomeE0,47E0,C7E0,6CE0,F0,6C4A
EndE0,4FE0,CFE0,69E0,F0,694D
Page UpE0,49E0,C9E0,7DE0,F0,7D4B
Page DownE0,51E0,D1E0,7AE0,F0,7A4E
DeleteE0,53E0,D3E0,71E0,F0,714C
E0,48E0,C8E0,75E0,F0,7552
E0,4BE0,CBE0,6BE0,F0,6B50
E0,50E0,D0E0,72E0,F0,7251
E0,4DE0,CDE0,74E0,F0,744F
Цифровая клавиатура
Num Lock45C577F0,7753
/E0,35E0,B5E0,4AE0,F0,4A54
*37B77CF0,7C55
-4ACA7BF0,7B56
+4ECE79F0,7957
↵ EnterE0,1CE0,9CE0,5AE0,F0,5A58
.53D371F0,7163
052D270F0,7062
14FCF69F0,6959
250D072F0,725A
351D17AF0,7A5B
44BCB6BF0,6B5C
54CCC73F0,735D
64DCD74F0,745E
747C76CF0,6C5F
848C875F0,7560
949C97DF0,7D61
Клавиши ACPI
PowerE0,5EE0,DEE0,37E0,F0,37A5
SleepE0,5FE0,DFE0,3FE0,F0,3FA6
WakeE0,63E0,E3E0,5EE0,F0,5EA7
Мультимедиа-клавиши
Управление проигрывателем
Следующий трекE0,19E0, 99E0, 4DE0,F0,4DAB
Предыдущий трекE0,10E0, 90E0,15E0,F0,15AC
ОстановитьE0,24E0,A4E0,3BE0,F0,3BAD
Проигрывать/паузаE0,22E0,A2E0,34E0,F0,34AE
Звук вкл/отклE0,20E0,A0E0,23E0,F0,23A8
Увеличить громкостьE0,30E0,B0E0,32E0,F0,32A9
Уменьшить громкостьE0,2EE0,AEE0,21E0,F0,21AA
Управление браузером
ПоискE0,65E0,E5E0,10E0,F0,10B4
Домашняя страницаE0,32E0,B2E0,3AE0,F0,3AB5
НазадE0,6AE0,EAE0,38E0,F0,38B6
ВпередE0,69E0,E9E0,30E0,F0,30B7
СтопE0,68E0, E8E0,28E0,F0,28B8
ОбновитьE0,67E0,E7E0,20E0,F0,20B9
ЗакладкиE0,66E0, E6E0,18E0,F0,18BA
Управление приложениями
Media SelectE0,6DE0,EDE0,50E0,F0,50BO
Электронная почтаE0,6CE0,ECE0,48E0,F0,48B1
КалькуляторE0,21E0,A1E0,2BE0,F0,2BB2
Мой компьютерE0,6BE0,EBE0,40E0,F0,40B3

В чистом 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 при этом генерируется отдельно.

Во времена, когда многие корпоративные пользователи работали на терминалах, подключенных к мейнфреймам, существовали 122-клавишные клавиатуры, у которых имелся дополнительный ряд функциональных клавиш — от F12 до F24 (см. Model F keyboard[англ.], Model M keyboard[англ.], самой популярной из них была IBM Model M 122, выпущенная в 1985 году). Сейчас Microsoft также задействовала код этих клавиш для специальной клавиши [Copilot] (имеется на клавиатурах некоторых новых ноутбуков): её скан-код — левый Ctrl + Win + F23)[1].

См. также

Литература

  • IBM Personal System/2™ Model 25: Technical Reference. — International Business Machines Corporation, 1987. — (IBM Personal Computer Hardware Reference Library).

Ссылки

Примечания