查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices

设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键,比如KEY_0,KEY-Z等,所以需要用到按键模拟,具体 方法就是操作/dev/input/event1文件,向它写入个input_event结构体就可以模拟按键的输入了。

linux/input.h中有定义,这个文件还定义了标准按键的编码等

struct input_event {

struct timeval time; //按键时间

__u16 type; //类型,在下面有定义

__u16 code; //要模拟成什么按键

__s32 value;//是按下还是释放

};

code:

事件的代码.如果事件的类型代码是EV_KEY,该代码code为设备键盘代码.代码植0~127为键盘上的按键代码,0x110~0x116 为鼠标上按键代码,其中0x110(BTN_ LEFT)为鼠标左键,0x111(BTN_RIGHT)为鼠标右键,0x112(BTN_ MIDDLE)为鼠标中键.其它代码含义请参看include/linux/input.h文件. 如果事件的类型代码是EV_REL,code值表示轨迹的类型.如指示鼠标的X轴方向REL_X(代码为0x00),指示鼠标的Y轴方向REL_Y(代码 为0x01),指示鼠标中轮子方向REL_WHEEL(代码为0x08).

type:

EV_KEY,键盘

EV_REL,相对坐标

EV_ABS,绝对坐标

value:

事件的值.如果事件的类型代码是EV_KEY,当按键按下时值为1,松开时值为0;如果事件的类型代码是EV_ REL,value的正数值和负数值分别代表两个不同方向的值.

/*

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/input.h>
#include <unistd.h>

#define KEY_Q 16
int main(int argc,char *argv[])
{
    struct input_event s;
    int fd;
    int ret ;
    fd = open("/dev/input/event1",O_RDONLY);
    if(fd<0){
        perror("open");
        return -1;
    }
    while(1){
        ret = 0;
        ret = read(fd,&s,sizeof(s));
        if(ret && s.value!=0){
            printf("<s.type=%d><s.code=%d><s.value=%d>\n",s.type,s.code,s.value);
            if(s.value==1 && s.code==KEY_Q ){
                break;
            }   
        }
    }
    close(fd);
    return 0;
}

linux struct input_event结构体详解相关推荐

  1. linux sock结构体,struct socket结构体详解

    在内核中为什么要有struct socket结构体呢? struct socket结构体的作用是什么? 下面这个图,我觉得可以回答以上两个问题.  由这个图可知,内核中的进程可以通过使用struct ...

  2. struct sk_buff结构体详解

    struct sk_buff是linux网络系统中的核心结构体,linux网络中的所有数据包的封装以及解封装都是在这个结构体的基础上进行. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  3. struct ethhdr结构体详解

        在linux系统中,使用struct ethhdr结构体来表示以太网帧的头部.这个struct ethhdr结构体位于#include<linux/if_ether.h>之中. # ...

  4. 计算机科学类专升本复习之“C语言结构体”详解(初稿)

    C语言结构体详解,C语言struct用法详解 前面所学到的"数组":它是一组具有"相同类型"的数据的集合. 但是在实际的编程中,我们往往还需要 一组" ...

  5. C语言结构体详解(结构体定义,使用,结构体大小等)

    c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...

  6. C# 之 结构体详解

    C# 之 结构体详解 一.结构体的定义 二.结构体的初始化 1.实例构造函数 2.静态构造函数 三.结构体的使用 1.赋值操作 2.作为方法参数和返回值 一.结构体的定义 概念:C#的结构体类型(或称 ...

  7. windows内核开发笔记七:内核开发OVERLAPPED结构体详解

    windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED {   DWORD Internal;   DWORD InternalHi ...

  8. 【FFmpeg】结构体详解(二):AVStream、AVPacket、AVOutputFormat

    FFmpeg结构体详解 7.AVStream 8.AVPacket 9.AVOutputFormat 7.AVStream AVStream 是存储每一个视频/音频流信息的结构体. 重要的变量如下所示 ...

  9. 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext

    FFmpeg结构体详解 一.FFmpeg中最关键的结构体之间的关系 1.解协议(http,rtsp,rtmp,mms) 2.解封装(flv,avi,rmvb,mp4) 3.解码(h264,mpeg2, ...

最新文章

  1. 解析:GE工业互联网平台Predix
  2. JQuery 匿名函数初识(转载)
  3. swift 简单语句 控制流语句
  4. 海峡两岸消防专家论坛台湾举行
  5. URLClassLoader的使用
  6. java中true转换为int_在Java中将字节转换为int的最优雅的方式
  7. java 图片合并_Java如何实现图片的叠加与拼接操作
  8. Mysql的数据库引擎 区别特点_mysql数据库存储引擎及区别
  9. Visual C# 2005 - 利用程序代码制作简单动画效果
  10. JAVA实现随机无重复数字功能
  11. 窗口拖动后,还原窗口位置
  12. 异常处理与自定义异常
  13. rgb转nv12 nv12转rgb
  14. Power Query M语言概述
  15. 使用MaxScale实现mysql读写分离
  16. 内网渗透测试:隐藏通讯隧道技术
  17. 银行电话营销数据分析
  18. 宠物商店mysql数据库设计_宠物商城数据库设计
  19. 指纹支付 java lang6_支付宝;超6成人使用指纹、刷脸支付,网友;喜欢用密码!...
  20. 20155314 2016-2017-2 《Java程序设计》第4周学习总结

热门文章

  1. python函数执行shell_6方法,python中执行shell命令
  2. python画有权重网络图_使用Python的networkx绘制精美网络图教程
  3. spring boot html乱码,Spring-boot 字符集设置 解决乱码方案
  4. oracle substr(table),oracle中的substr()函数
  5. jps后发现DataNode没有启动
  6. implements OnClickListener
  7. [流体输配管网] 使用 Matlab 绘制莫迪图
  8. layui响应式:隐藏与显示(class 类名后缀)
  9. JavaScript条形码生成插件 - 封装篇
  10. element-ui省市区三级联动:选择即改变