最近做了一个linux下面的模拟鼠标和键盘的app,但不是很清楚字符对应的键值;查找内核源码,在kernel/include/uapi/linux/input.h文件中找到;
下面给出普通键盘上面对应的键值:
键名 | 值(十进制) |
ESC | 1 |
F1 | 59 |
F2 | 60 |
F3 | 61 |
F4 | 62 |
F5 | 63 |
F6 | 64 |
F7 | 65 |
F8 | 66 |
F9 | 67 |
F10 | 68 |
F11 | 87 |
F12 | 88 |
` ~ | 41 |
1 ! | 2 |
2 @ | 3 |
3 # | 4 |
4 $ | 5 |
5 % | 6 |
6 ^ | 7 |
7 & | 8 |
8 * | 9 |
9 ( | 10 |
0 ) | 11 |
- _ | 12 |
+ = | 13 |
Backspace(退格键) | 14 |
Tab | 15 |
q Q | 16 |
w W | 17 |
e E | 18 |
r R | 19 |
t T | 20 |
Y y | 21 |
u U | 22 |
i I | 23 |
o O | 24 |
p P | 25 |
[ { | 26 |
] } | 27 |
Enter(回车键) | 28 |
CapsLock | 58 |
a A | 30 |
s S | 31 |
d D | 32 |
f F | 33 |
g G | 34 |
h H | 35 |
j J | 36 |
k K | 37 |
l L | 38 |
; : | 39 |
' " | 40 |
\ | | 43 |
Left_shift(左上档键) | 42 |
z Z | 44 |
x X | 45 |
c C | 46 |
v V | 47 |
b B | 48 |
n N | 49 |
m M | 50 |
, < | 51 |
. > | 52 |
/ ? | 53 |
Right_shift(右上档键) | 54 |
Left_ctrl(左Ctrl键) | 29 |
左Super键(windows键) | 125 |
Left_alt(左alt键) | 56 |
space(空格键) | 57 |
Right_alt(右alt键) | 100 |
右Super键(windows键) | 126 |
菜单键 | 127 |
Right_ctrl(右Ctrl键) | 97 |
Print Screen键 | 99 |
ScrollLock键 | 70 |
PauseBreak键 | 119 |
Insert | 110 |
Home | 102 |
PageUp | 104 |
Delete | 111 |
End | 107 |
PageDown | 109 |
方向键上 | 103 |
方向键下 | 108 |
方向键左 | 105 |
方向键右 | 106 |
NumLock | 69 |
/ (小键盘) | 98 |
* (小键盘) | 55 |
- (小键盘) | 74 |
+ (小键盘) | 78 |
Enter(小键盘) | 96 |
. (小键盘) | 83 |
0 (小键盘) | 82 |
1 (小键盘) | 79 |
2 (小键盘) | 80 |
3 (小键盘) | 81 |
4 (小键盘) | 75 |
5 (小键盘) | 76 |
6 (小键盘) | 77 |
7 (小键盘) | 71 |
8(小键盘) | 72 |
9(小键盘) | 73 |
那么用这些可以做什么呢?
1:键盘记录器(linux下)
记录器代码:
https://paste.ubuntu.com/p/ksfPqyBtq3/
翻译器代码:
https://paste.ubuntu.com/p/ybS3kgWbmb/
测试:
首先打开记录器:
打开翻译器翻译:
2: 模拟键盘组合键
//文件名sim_ctrl.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<linux/input.h> #include<fcntl.h> #include<sys/time.h> char * kbd_dev="/dev/input/event7";//可能不是event7,要使用cat /proc/bus/input/devices| grep kbd 查看 int Ctrl(int kval) { int fd = -1; fd = open(kbd_dev, O_RDWR); if(fd <= 0) { printf("Can not open mouse input file\n"); return -1; } struct input_event event; //control down gettimeofday(&event.time, 0); event.type = EV_KEY; event.value = 1; event.code = 29; write(fd, &event, sizeof(event)); //key down gettimeofday(&event.time, 0); event.type = EV_KEY; event.value = 1; event.code = kval; write(fd, &event, sizeof(event)); //key up gettimeofday(&event.time, 0); event.type = EV_KEY; event.value = 0; event.code = kval; write(fd, &event, sizeof(event)); //control up gettimeofday(&event.time, 0); event.type = EV_KEY; event.value = 0; event.code = 29; write(fd, &event, sizeof(event)); //syn gettimeofday(&event.time, 0); event.type = EV_SYN; event.value = 0; event.code = SYN_REPORT; write(fd, &event, sizeof(event)); close(fd); return 0; } int main() { sleep(5); //模拟Ctrl+C Ctrl(46);//c的键值为44 }