Универсальный внешний накопитель для всех 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
Основная клавиатура
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

Отправить ответ

avatar
  Подписаться  
Уведомление о