Linux下键盘值 对应input_evnet的code值。
最近做了一个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 = -;
fd = open(kbd_dev, O_RDWR);
if(fd <= )
{
printf("Can not open mouse input file\n");
return -;
}
struct input_event event; //control down
gettimeofday(&event.time, );
event.type = EV_KEY;
event.value = ;
event.code = ;
write(fd, &event, sizeof(event)); //key down
gettimeofday(&event.time, );
event.type = EV_KEY;
event.value = ;
event.code = kval;
write(fd, &event, sizeof(event)); //key up
gettimeofday(&event.time, );
event.type = EV_KEY;
event.value = ;
event.code = kval;
write(fd, &event, sizeof(event)); //control up
gettimeofday(&event.time, );
event.type = EV_KEY;
event.value = ;
event.code = ;
write(fd, &event, sizeof(event));
//syn
gettimeofday(&event.time, );
event.type = EV_SYN;
event.value = ;
event.code = SYN_REPORT;
write(fd, &event, sizeof(event)); close(fd);
return ;
} int main()
{
sleep();
//模拟Ctrl+C
Ctrl();//c的键值为44
}
Linux下键盘值 对应input_evnet的code值。的更多相关文章
- Fedora Linux 下安装配置C开发环境Code::Blocks
一.提前的话要说C语言和Linux的关系大家应该都不会陌生,Linux系统内核就是用C语言开发的,所以所有的Linux系统下面 都会有C的编译调试工具,不过这些工具都是命令式的,正式开发的话会很不方便 ...
- linux系统下键盘按键的重新映射——xmodmap工具和xev工具
大家会不会有时候,感觉键盘上的某几个键用起来不是很方便,打字打久了很容易手指头疼呢? 例如大家使用vim编辑器时, 经常需要使用到esc键,而该键在左上角,很不方便的.再比如写程序的时候,经常会使用到 ...
- Linux下统计出现次数最多的指定字段值
假设桌面上有一个叫“data.txt”的文本,内容如下: {id='xxx' info='xxx' kk='xxx' target='111111' dd='xxx'}{id='xxx' info=' ...
- 在Ubuntu Linux下安装Code::Blocks和Eclipse CDT
最近小白由于有工作学习的需要,要尝试在Linux下进行C++编程.所以特地花了一点时间研究一下Linux下的C++的IDE.最后我尝试了使用Code::Blocks和Eclipse两个著 ...
- linux下C++ STL hash_map的使用以及使用char *型变量作为Key值的一大“坑”
计算机编程中经常会用到hash表,而在C++中,使用STL编程更是少不了的.本文将介绍STL中hash_map的使用.在hash_map中使用自定义类型作为key值的方法以及在使用char *类型作为 ...
- MTU介绍以及在windows和linux下怎么设置MTU值
最大传输单元MTU(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位).最大传输单元这个参数通常与通信接口有关(网络接口卡 ...
- Arch Linux下Visual Stdio Code在格式化C代码时报错
libtinfo.so.5: cannot open shared object file: No such file or directory Arch Linux下Visual Stdio Cod ...
- 在Linux下锁住键盘和鼠标而不锁屏
假如在你正看着屏幕上的某些重要的事情时,你不想让你的小猫或者小狗在你的键盘上行走,或者让你的孩子在键盘上瞎搞一气,那我建议你试试 xtrlock 这个工具. 假如在你正看着屏幕上的某些重要的事情时,你 ...
- 实现Linux下dc的功能,计算后缀表达式的值
提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值 -将运算符写在两个操作数之后的表达式称为"后缀表达式",如上面的中缀表达式可转换为后缀表达式1 2 ...
随机推荐
- Spring基础系列-AOP源码分析
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9560803.html 一.概述 Spring的两大特性:IOC和AOP. AOP是面向切 ...
- eclipse如何将项目上传到码云
把Eclipse项目上传到码云的步骤: 一.将代码提交到本地 1.登录码云:新建项目 2.输入项目名: 3.空项目创建成功如下图: 4.右键点击Eclipse的项目,选择“Team”——>“Sh ...
- C# 反射Reflection Assembly
反射反射程序员的快乐 一:什么叫反射 反射:是.net framework提供的一个访问metadata的帮助类,可以获取信息并且使用 反射的优点:动态 反射的缺点:1:稍微麻烦 2:能避开编译器的 ...
- 【golang-GUI开发】项目的编译
在上一篇文章里,我们讲到了安装therecipe/qt(https://www.cnblogs.com/apocelipes/p/9296754.html),现在我们来讲讲如何编译使用了thereci ...
- team项目学习01
项目里面有好多单词不理解.先查一下. authorize:授权,批准 controller:控制器 domain:领域,域 form:表格,形式,窗体 interceptor 拦截器,自定义动画渲染器 ...
- c# 项目之间循环引用vs弹窗提醒
circular dependencies in projects' graph ! Projects in cycle are:ProjectImp(Name:FrameWork.Entity,Pl ...
- 深入理解Redis内存模型
前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...
- JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏
摘要: 作者将自己常用的JavaScript模块分享给大家. 原文:JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏 作者:前端小智 Fundebug经授权转载,版权归原作者所有. ...
- vue(四)-vuex与组件联合使用
官方定义: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.我的理解就是,vuex就是前端的数据库. 1.首先核心是store,是个仓库,包含着state,因此第一步需要新建一个sto ...
- LintCode Majority Number II / III
Given an array of integers, the majority number is the number that occurs more than 1/3 of the size ...