keyboard scan code 表

keyboard scan code 表


当按下一键时,产生 mark 码,产生一次 IRQ1 中断。

放开键时,产生 break 码,产生一次 IRQ1 中断。

因此:当按下 A 键放开,实际上产生了两次 IRQ1 中断

break 是 mark 码的 bit7 置 1 得来,也就是: break = mark + 0x80

 

1、scan code 集

这里只说一般日常应用中的键盘码集 set 2(有 set 1、set 2 以及 set 3)

  • 基本 scan code:绝大多数 scan code 是 1 byte 的。
  • 扩展 scan code:由 e0e1 或 e2 引导
  • 特殊的 PrintScreen/SysRq 键:e0 2a e0 37
  • 物殊的 Pause/Break 键:e1 1d 45 e1 9d c5

 

 

2、小键盘 scan code 表

key
mark(Hex)
break(Hex)
描述
NumLock
45
c5
break = mark + 0x80
/
e0 35
e0 b5
由 e0 引导出 extend scan code
*
37
b7
break = mark + 0x80
-
4a
ca
同上
7/Home
47
c7
同上
8/Up
48
c8
同上
9/PgUp
49
c9
同上
4/Left
4b
cb
同上
5
4c
cc
同上
6/Right
4d
cd
同上
1/End
4f
cf
同上
2/Down
50
d0
同上
3/PgDn
51
d1
同上
0/Ins
52
d2
同上
./Del
53
d3
同上
+
4e
ce
同上
Enter
e0 1c
e0 9c
extend scan code

小键盘中的 <home><Up><PgUp><Left><Right><End><Down><PgDn><Ins><Del> 由 NumLock 按下后再按得来。

因此,会产生一个 <NumLock> mark 码后,再产生上述的 mark 码。 释放 <NumLock> 又产生一个 break 码。

 

3、附加键 scan code 表

key
mark(Hex)
break(Hex)
描述
PrintScreen/SysRq
e0 2a e0 37
e0 b7 e0 aa
extend scan code
Scroll Lock
46
c6
同上
Pause/Break
e1 1d 45 e1 9d c5
*
同上
Insert
e0 52
e0 d2
同上
Home
e0 47
e0 c7
同上
Page Up
e0 49
e0 c9
同上
Delete
e0 53
e0 d3
同上
End
e0 4f
e0 cf
同上
Page Down
e0 51
e0 d1
同上
left
e0 46
e0 c6
同上
right
e0 4d
e0 cd
同上
up
e0 48
e0 c8
同上
down
e0 50
e0 d0
同上

抱歉:我对 PrintScreen/SysRq 和 Pause/Break 的理解未透彻。在这不便讲解。

如果您知道,请留言赐教。

 

 

4、功能键 scan code 表

key
mark(Hex)
break(Hex)
描述
<esc>
01
81
scan code
F1
3b
bb
同上
F2
3c
bc
同上
F3
3d
bd
同上
F4
3e
be
同上
F5
3f
bf
同上
F6
40
c0
同上
F7
41
c1
同上
F8
42
c2
同上
F9
43
c3
同上
F10
44
c4
同上
F11
57
d7
同上
F12
58
d8
同上

 

 

5、主键盘 scan code 表

key
mark
break
key
mark
break
key
mark
break
key
mark
break
~/·
29
a9
<tab>
0f
8f
<scapslock>
3a
ba
<L-shift>
2a
aa
!/1
02
82
q
10
90
a
1e
9e
z
2c
ac
@/2
03
83
w
11
91
s
1f
9f
x
2d
ad
#/3
04
84
e
12
12
d
20
a0
c
2e
ae
$/4
05
85
r
13
93
f
21
a1
v
2f
af
%/5
06
86
t
14
94
g
22
a2
b
30
b0
^/6
07
87
y
15
95
h
23
a3
n
31
b1
&/7
08
88
u
16
96
j
24
a4
m
32
b2
*/8
09
89
i
17
97
k
25
a5
</,
33
b3
(/9
0a
8a
o
18
98
l
26
a6
>/.
34
b4
)/0
0b
8b
p
19
99
:/;
27
a7
?//
35
b5
_/-
0c
8c
{/[
1a
9a
"/'
28
a8
<R-shift>
36
b6
+/=
0d
8d
}/]
1b
9b
<Enter>
1c
9c
<L-ctrl>
1d
9d
|/\
2b
ab
      
<L-alt>
38
b8
<backspace>
0e
8e
      
<space>
39
b9
         
<R-alt>
e0 38
e0 b8
         
<R-ctrl>
e0 1d
e0 9d

若输入字符“ABCD”有两种方法

(1)按下 <CapsLock> 键后,再输入 abcd 键,再按 <CapsLock> 键

这样会产生一个 <CapsLock> 键 mark 和 break 码,然后依次是 abcd 的 mark 和 break 码, 最后是 <CapsLock> 的 mark 和 break 码

 

(2)按着 <L-shift> 或 <R-shift> 不放,再按 abcd 键,再放开 <L-shift> 或 <R-shift> 键

这样会产生一个 <L-shift> 或 <R-shift> 键的 mark 码,然后依次是 abcd 的 mark 和 break 码,最后是一个 <L-shift> 或 <R-shift> 键的 break 码

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码中有几个问题: 1. 在 `keyboard.wait('1' or '2' or '3')` 这一行中,`'1' or '2' or '3'` 实际上会返回 `'1'`,因为在 Python 中,非空字符串会被视为 True,因此 `'1' or '2' or '3'` 的结果是第一个非空字符串 `'1'`。这意味着,`keyboard.wait()` 只会等待按下 '1' 键,而不是 '1'、'2'、'3' 任意一个键。如果想要等待多个键,可以使用列,例如 `keyboard.wait(['1', '2', '3'])`。 2. 在回调函数 `abc()` 中,第三个判断语句的输出是 'a',应该改为输出 'c'。 3. `flag` 是一个全局变量,需要在函数内部声明为 global,才能在函数内部修改它的值。 4. 在 `if flag:` 这一行中,应该将处理输入的代码放到一个循环中,否则每次只能输入一次,而且只有在键盘事件发生后才能输入,这可能不是期望的行为。 下面是修改后的代码: ```python flag = False def abc(x): global flag a = keyboard.KeyboardEvent(event_type='down', scan_code=2, name='1') b = keyboard.KeyboardEvent(event_type='down', scan_code=3, name='2') c = keyboard.KeyboardEvent(event_type='down', scan_code=4, name='3') if x.event_type == a.event_type and x.scan_code == a.scan_code: print("a") flag = True if x.event_type == b.event_type and x.scan_code == b.scan_code: print("b") flag = True if x.event_type == c.event_type and x.scan_code == c.scan_code: print("c") flag = True keyboard.hook(abc) while True: if flag: print("Paused, please input something:") ipt = input() print("You input {}".format(ipt)) flag = False ``` 这里使用了一个无限循环,不断检查 `flag` 的值,如果为 True,则进入输入循环,直到输入完成后将 `flag` 的值设为 False。这样可以实现多次输入,而不必等待下一次键盘事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值