键位扫描码,用event.keyCode获得

本文详细介绍了通过JavaScript获取键盘按键的扫描码及如何利用event对象判断用户按下的是哪个键。此外,还提供了几种实用的判断函数,如判断是否为数字键、字母键或字符键等。
一、键位扫描码,用event.keyCode获得
8
 
退格    
9
 
Tab     
12
 
小键盘<5>numlock未锁定时
13
 
回车    
16
 
Shift    
17
 
Ctrl     
18
 
Alt    
19
 
Pause Break
20
 
CapsLock 
27
 
Esc     
33
 
PgUp    
34
 
PgDn    
35
 
End     
36
 
Home   
37
 
38
 
39
 
40
 
45
 
Insert和小键盘的Ins
46
 
Delete和小键盘的Del
48
 
0 )
49
 
1 !
50
 
2 @
51
 
3 #
52
 
4 $
53
 
5 %
54
 
6 ^
55
 
7 &
56
 
8   *
57
 
9 (
65
 
A(小写一样)
66
 
B
67
 
C
68
 
D
69
 
E
70
 
F
71
 
G
72
 
H
73
 
I
74
 
J
75
 
K
76
 
L
77
 
M
78
 
N
79
 
O
80
 
P
81
 
Q
82
 
R
83
 
S
84
 
T
85
 
U
86
 
V
87
 
W
88
 
X
89
 
Y
90
 
Z
91
 
左窗键
92
 
右窗键
93
 
仿右鼠标键
96
 
0(小键盘)
97
 
1(小键盘)
98
 
2(小键盘)
99
 
3(小键盘)
100
 
4(小键盘)
101
 
5(小键盘)
102
 
6(小键盘)
103
 
7(小键盘)
104
 
8(小键盘)
105
 
9(小键盘)
106
 
*(小键盘
107
 
+(小键盘)
109
 
-(小键盘)
111
 
/(小键盘)
112
 
F1      IE占用
113
 
F2     
114
 
F3      IE占用
115
 
F4      IE占用
116
 
F5      IE占用
117
 
F6      IE占用
118
 
F7     
119
 
F8     
120
 
F9     
121
 
F10    
取不到
 
F11     
取不到
 
F12    
取不到
 
Print Screen SysRq
144
 
NumLock
145
 
Scroll Lock
186
 
:    ;   
187
 
+    =  
188
 
<    ,   
189
 
-    _   
190
 
>    .   
191
 
?    /   
192
 
`    ~   
219
 
{    [   
220
 
|    /    
221
 
}    ]   
222
 
"    '   
 
二、检测同时按下的控制键用:
event.altKey     true为按下了Alt键
event.ctrlKey    true为按下了Ctrl键
event.shiftKey   true为按下了Shift键
 
三、判断函数
//是否数字键
function isnumkey(nkey)
{
if(!event.altKey && !event.ctrlKey && !event.shiftKey &&
(nkey>=48 && nkey<=57 || nkey>=96 && nkey<=105))
return true;
else
return false;
}
 
//是否字母键
function isalphakey(nkey)
{
if(!event.altKey && !event.ctrlKey && nkey>=65 && nkey<=90)
return true;
else
return false;
}
 
//是否字符键
function ischarkey(nkey)
{
if(!event.altKey && !event.ctrlKey && (nkey>=65 && nkey<=90 ||
nkey>=48 && nkey<=57 || nkey>=96 && nkey<=105 || nkey==106 ||
nkey==107 || nkey==109 || nkey==110 || nkey==111 ||
nkey>=186 && nkey<=192 || nkey>=219 && nkey<=222))
return true;
else
return false;
}

 
### 如何通过开发输入事件读取键盘数据 在 Linux 系统中,`/dev/input/event*` 是用于捕获硬件输入设备(如键盘、鼠标等)事件的字符设备文件。这些设备遵循特定的数据结构和协议,可以通过编程方式访问并解析。 #### 数据结构概述 Linux 输入子系统的 `struct input_event` 定义了事件的基本格式[^3]: ```c struct input_event { struct timeval time; /* 时间戳 */ unsigned short type; /* 事件类型 (EV_KEY, EV_REL, etc.) */ unsigned short code; /* 键或其他具体编 */ int value; /* 值 (按下、释放、保持等) */ }; ``` - **time**: 表示事件发生的时间。 - **type**: 描述事件类别,例如按键 (`EV_KEY`) 或相对移动 (`EV_REL`)。 - **code**: 对应具体的键位或动作代。 - **value**: 提供额外的信息,比如按键的状态(按压、释放)。 #### Python 示例代 以下是使用 Python 解析 `/dev/input/eventX` 文件的一个简单实现: ```python import evdev from evdev import InputDevice, categorize, ecodes # 打开指定的 event 设备 device_path = '/dev/input/event0' # 替换为实际的键盘 event 路径 try: device = InputDevice(device_path) except PermissionError: print(f"无法打开 {device_path},可能需要 root 权限") print(f'连接到设备: {device.name}') for event in device.read_loop(): if event.type == ecodes.EV_KEY: # 只处理按键事件 key_event = categorize(event) if key_event.keystate == key_event.key_down: print(f"按键按下: {key_event.keycode}") elif key_event.keystate == key_event.key_up: print(f"按键释放: {key_event.keycode}") ``` 此脚本依赖于 `evdev` 库,它简化了对输入事件的操作。如果未安装该库,则可通过以下命令安装: ```bash pip install evdev ``` #### C 示例代 对于更底层的应用场景,可以直接用 C 编程语言操作 `/dev/input/eventX`: ```c #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <linux/input.h> int main() { const char *device_path = "/dev/input/event0"; // 替换为实际路径 int fd = open(device_path, O_RDONLY); if (fd < 0) { perror("无法打开设备"); exit(EXIT_FAILURE); } printf("正在监听 %s\n", device_path); struct input_event ev; while (read(fd, &ev, sizeof(struct input_event)) > 0) { if (ev.type == EV_KEY && ev.value == 1) { // 按下事件 printf("按键按下: %d\n", ev.code); } } close(fd); return EXIT_SUCCESS; } ``` 编译运行上述程序前需确保具有足够的权限访问目标设备文件。 #### 动态识别设备及其对应的 Event 接口 由于不同设备插入顺序可能导致其被分配不同的 `eventX` 名称,因此建议动态扫描 `/dev/input/by-id/` 或 `/sys/class/input/` 目录以找到匹配的具体设备名称[^4]^。 下面是一个简单的 Bash 脚本来查找键盘关联的 event 文件: ```bash #!/bin/bash KEYBOARD_NAME="AT Translated Set 2 keyboard" EVENT_PATH=$(find /sys/devices/platform/i8042 -name name | \ xargs grep -l "$KEYBOARD_NAME" | sed 's#/device/name$#/event*/'/) if [[ ! -z $EVENT_PATH ]]; then echo "Keyboard found at: /dev/input/$EVENT_PATH" else echo "Keyboard not detected." fi ``` 将 `$KEYBOARD_NAME` 设置为目标键盘的名字即可定位正确的 event 文件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值