Linux下键盘值 对应input_evnet的code值。

本文介绍了Linux系统中键盘按键的键值,并提供了一个简单的键盘记录器实例及模拟Ctrl+C操作的方法。通过阅读本文,你可以了解如何在Linux环境下进行键盘事件的捕获与模拟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做了一个linux下面的模拟鼠标和键盘的app,但不是很清楚字符对应的键值;查找内核源码,在kernel/include/uapi/linux/input.h文件中找到;

下面给出普通键盘上面对应的键值:

   键名                             值(十进制)
ESC1
F159
F260
F361
F462
F563
F664
F765
F866
F967
F1068
F1187
F1288
` ~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
Tab15
q Q16
w W17
e E18
r R19
t T20
Y y21
u U22
i I23
o O24
p P25
[ {26
] }27
Enter(回车键)28
CapsLock58
a A30
s S31
d D32
f F33
g G34
h H35
j J36
k K37
l L38
; :39
' "40
\ |43
Left_shift(左上档键)42
z Z44
x X45
c C46
v V47
b B48
n N49
m M50
, <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
Insert110
Home102
PageUp104
Delete111
End107
PageDown109
方向键上103
方向键下108
方向键左105
方向键右106
NumLock69
/ (小键盘)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
}

 

转载于:https://www.cnblogs.com/amaza/p/7968165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值