Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Ремаппинг клавиш на клавиатуре / 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 и выполняет такую же замену в реестре

1. В ветке
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 @

03h

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

Ctrl + F6

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
Основная клавиатура
A1E9E1CF0,1C
B30B032F0,32
C2EAE21F0,21
D20A023F0,23
E129224F0,24
F21A12BF0,2B
G22A234F0,34
H23A333F0,33
I179743F0,43
J24A43BF0,3B
K25A542F0,42
L26A64BF0,4B
M32B23AF0,3A
N31B131F0,31
O189844F0,44
P19994DF0,4D
Q109015F0,15
R13932DF0,2D
S1F9F1BF0,1B
T14942CF0,2C
U16963CF0,3C
V2FAF2AF0,2A
W11911DF0,1D
X2DAD22F0,22
Y159535F0,35
Z2CAC1AF0,1A
00B8B45F0,45
1028216F0,16
203831EF0,1E
3048426F0,26
4058525F0,25
506862EF0,2E
6078736F0,36
708883DF0,3D
809893EF0,3E
90A8A46F0,46
~29890EF0,0E
-0C8C4EF0,4E
=0D8255F0,55
\2BAB5DF0,5D
[1A9A54F0,54
]1B9B5BF0,5B
;27A74CF0,4C
'28A852F0,52
,33B341F0,41
.34B449F0,49
/35B54AF0,4A
BS0E8E66F0,66
Space39B929F0,29
Tab ↹0F8F0DF0,0D
⇪ Caps Lock3ABA58F0,58
Левый ⇧ Shift2AAA12F0,12
Левый Ctrl1D9D14F0,14
Левый Alt38B811F0,11
Левый ⊞ WinE0,5BE0,DBE0,1FE0,F0,1F
Правый ⇧ Shift36B659F0,59
Правый CtrlE0,1DE0,9DE0,14E0,F0,14
Правый AltE0,38E0,B8E0,11E0,F0,11
Правый ⊞ WinE0,5CE0,DCE0,27E0,F0,27
≣ MenuE0,5DE0,DDE0,2FE0,F0,2F
↵ Enter1C9C5AF0,5A
Esc018176F0,76
F13BBB05F0,05
F23CBC06F0,06
F33DBD04F0,04
F43EBE0CF0,0C
F53FBF03F0,03
F640C00BF0,0B
F741C183F0,83
F842C20AF0,0A
F943C301F0,01
F1044C409F0,09
F1157D778F0,78
F1258D807F0,07
PrtScrE0,2A,E0,37E0,B7,E0,AAE0,12,E0,7CE0,F0,7C,E0,F0,12
Alt+PrtScr54 (вместо PrtScr,

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

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

D4 (вместо PrtScr,

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

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

??
Ctrl+PrtScr,

⇧ Shift+PrtScr

(SysReq)

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

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

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

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

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

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

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

(Ctrl+Pause)

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

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

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

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

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

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

??
InsertE0,52E0,D2E0,70E0,F0,70
HomeE0,47E0,C7E0,6CE0,F0,6C
EndE0,4FE0,CFE0,69E0,F0,69
Page UpE0,49E0,C9E0,7DE0,F0,7D
Page DownE0,51E0,D1E0,7AE0,F0,7A
DeleteE0,53E0,D3E0,71E0,F0,71
E0,48E0,C8E0,75E0,F0,75
E0,4BE0,CBE0,6BE0,F0,6B
E0,50E0,D0E0,72E0,F0,72
E0,4DE0,CDE0,74E0,F0,74
Цифровая клавиатура
Num Lock45C577F0,77
/E0,35E0,B5E0,4AE0,F0,4A
*37B77CF0,7C
-4ACA7BF0,7B
+4ECE79F0,79
↵ EnterE0,1CE0,9CE0,5AE0,F0,5A
.53D371F0,71
052D270F0,70
14FCF69F0,69
250D072F0,72
351D17AF0,7A
44BCB6BF0,6B
54CCC73F0,73
64DCD74F0,74
747C76CF0,6C
848C875F0,75
949C97DF0,7D
Клавиши ACPI
PowerE0,5EE0,DEE0,37E0,F0,37
SleepE0,5FE0,DFE0,3FE0,F0,3F
WakeE0,63E0,E3E0,5EE0,F0,5E
Мультимедиа клавиши
Управление проигрывателем
Следующий трекE0,19E0, 99E0, 4DE0,F0,4D
Предыдущий трекE0,10E0, 90E0,15E0,F0,15
ОстановитьE0,24E0,A4E0,3BE0,F0,3B
Проигрывать/паузаE0,22E0,A2E0,34E0,F0,34
Звук вкл/отклE0,20E0,A0E0,23E0,F0,23
Увеличить громкостьE0,30E0,B0E0,32E0,F0,32
Уменьшить громкостьE0,2EE0,AEE0,21E0,F0,21
Управление браузером
ПоискE0,65E0,E5E0,10E0,F0,10
Домашняя страницаE0,32E0,B2E0,3AE0,F0,3A
НазадE0,6AE0,EAE0,38E0,F0,38
ВпередE0,69E0,E9E0,30E0,F0,30
СтопE0,68E0, E8E0,28E0,F0,28
ОбновитьE0,67E0,E7E0,20E0,F0,20
ЗакладкиE0,66E0, E6E0,18E0,F0,18
Управление приложениями
Media SelectE0,6DE0,EDE0,50E0,F0,50
Электронная почтаE0,6CE0,ECE0,48E0,F0,48
КалькуляторE0,21E0,A1E0,2BE0,F0,2B
Мой компьютерE0,6BE0,EBE0,40E0,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 1E9E1CF0,1C
 B 30B032F0,32
 C 2EAE21F0,21
 D 20A023F0,23
 E 129224F0,24
 F 21A12BF0,2B
 G 22A234F0,34
 H 23A333F0,33
 I 179743F0,43
 J 24A43BF0,3B
 K 25A542F0,42
 L 26A64BF0,4B
 M 32B23AF0,3A
 N 31B131F0,31
 O 189844F0,44
 P 19994DF0,4D
 Q 109015F0,15
 R 13932DF0,2D
 S 1F9F1BF0,1B
 T 14942CF0,2C
 U 16963CF0,3C
 V 2FAF2AF0,2A
 W 11911DF0,1D
 X 2DAD22F0,22
 Y 159535F0,35
 Z 2CAC1AF0,1A
 0 0B8B45F0,45
 1 028216F0,16
 2 03831EF0,1E
 3 048426F0,26
 4 058525F0,25
 5 06862EF0,2E
 6 078736F0,36
 7 08883DF0,3D
 8 09893EF0,3E
 9 0A8A46F0,46
 ~ 29890EF0,0E
 - 0C8C4EF0,4E
 = 0D8255F0,55
 \ 2BAB5DF0,5D
 [ 1A9A54F0,54
 ] 1B9B5BF0,5B
 ; 27A74CF0,4C
 ' 28A852F0,52
 , 33B341F0,41
 . 34B449F0,49
 / 35B54AF0,4A
 ← Backspace 0E8E66F0,66
 Space 39B929F0,29
 Tab ⇆ 0F8F0DF0,0D
 Caps Lock 3ABA58F0,58
Левый  ⇧ Shift 2AAA12F0,12
Левый  Ctrl 1D9D14F0,14
Левый  Alt 38B811F0,11
Левый  Win E0,5BE0,DBE0,1FE0,F0,1F
Правый  ⇧ Shift 36B659F0,59
Правый  Ctrl E0,1DE0,9DE0,14E0,F0,14
Правый  Alt E0,38E0,B8E0,11E0,F0,11
Правый  Win E0,5CE0,DCE0,27E0,F0,27
 Menu E0,5DE0,DDE0,2FE0,F0,2F
 ↵ Enter 1C9C5AF0,5A
 Esc 018176F0,76
 F1 3BBB05F0,05
 F2 3CBC06F0,06
 F3 3DBD04F0,04
 F4 3EBE0CF0,0C
 F5 3FBF03F0,03
 F6 40C00BF0,0B
 F7 41C183F0,83
 F8 42C20AF0,0A
 F9 43C301F0,01
 F10 44C409F0,09
 F11 57D778F0,78
 F12 58D807F0,07
 PrtScr E0,2A,E0,37E0,B7,E0,AAE0,12,E0,7CE0,F0,7C,E0,F0,12
 Scroll Lock 46C67EF0,7E
 Pause E1,1D,45, E1,9D,C5E1,14,77,E1,F0,14,F0,77
 Insert E0,52E0,D2E0,70E0,F0,70
 Home 47C1E0,6CE0,F0,6C
 End E0,4FE0,CFE0,69E0,F0,69
 Page Up E0,49E0,C9E0,7DE0,F0,7D
 Page Down E0,51E0,D3E0,7AE0,F0,7A
 Delete E0,53E0,D3E0,71E0,F0,71
 ↑ E0,48E0,C8E0,75E0,F0,75
 ← E0,4BE0,CBE0,6BE0,F0,6B
 ↓ E0,5050,D0E0,70E0,F0,70
 → E0,4DE0,CDE0,74E0,F0,74
Цифровая клавиатура
 Num Lock 45C577F0,77
 / E0,35E0,B5E0,4AE0,F0,4A
 * 37B77CF0,7C
 - 4ACA7BF0,7B
 + 4ECE79F0,79
 ↵ Enter E0,1CE0,9CE0,5AE0,F0,5A
 . 53D371F0,71
 0 52D270F0,70
 1 4FCF69F0,69
 2 50D072F0,72
 3 51D17AF0,7A
 4 4BCB6BF0,6B
 5 4CCC73F0,73
 6 4DCD74F0,74
 7 47C76CF0,6C
 8 48C875F0,75
 9 49C97DF0,7D
Клавиши ACPI
 Power E0,5EE0,DEE0,37E0,F0,37
 Sleep E0,5FE0,DFE0,3FE0,F0,3F
 Wake E0,63E0,E3E0,5EE0,F0,5E
Мультимедиа клавиши
Управление проигрывателем
Следующий трекE0,19E0, 99E0, 4DE0,F0,4D
Предыдущий трекE0,10E0, 90E0,15E0,F0,15
ОстановитьE0,24E0,A4E0,3BE0,F0,3B
Проигрывать/паузаE0,22E0,A2E0,3BE0,F0,3B
Звук вкл/отклE0,20E0,A0E0,23E0,F0,23
Увеличить громкостьE0,30E0,B0E0,32E0,F0,32
Уменьшить громкостьE0,2EE0,AEE0,21E0,F0,21
Управление браузером
ПоискE0,65E0,E5E0,10E0,F0,10
Домашняя страницаE0,32E0,B2E0,3AE0,F0,3A
НазадE0,6AE0,EAE0,38E0,F0,38
ВпередE0,69E0,E9E0,30E0,F0,30
СтопE0,68E0, E8E0,28E0,F0,28
ОбновитьE0,67E0,E7E0,F0,20E0,F0,20
ЗакладкиE0,66E0, E6E0,18E0,F0,18
Управление приложениями
Media SelectE0,6DE0,EDE0,50E0,F0,50
Электронная почтаE0,6CE0,ECE0,48E0,F0,48
КалькуляторE0,21E0,A1E0,2BE0,F0,2B
Мой компьютерE0,6BE0,EBE0,40E0,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 и запоминает его в своем буфере, поскольку скан код может состоять из нескольких байт. Когда операционная система распознала последовательность байт, она генерирует соответствующий символ и отправляет его программе.

Сканкоды клавиш с буквами

НажатиеОтпускание
1CF0 1C
32F0 32
21F0 21
23F0 23
24F0 24
2BF0 2B
34F0 34
33F0 33
43F0 43
3BF0 3B
42F0 42
4BF0 4B
3AF0 3A
31F0 31
44F0 44
4DF0 4D
15F0 15
2DF0 2D
1BF0 1B
2CF0 2C
3CF0 3C
2AF0 2A
1DF0 1D
22F0 22
35F0 35
1AF0 1A

Сканкоды клавиш с цифрами

НажатиеОтпускание
45F0 45
16F0 16
1EF0 1E
26F0 26
25F0 25
2EF0 2E
36F0 36
3DF0 3D
3EF0 3E
46F0 46
0EF0 0E
4EF0 4E
55F0 55
5DF0 5D

cpubook.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *