Chinaunix首页 | 论坛 | 博客
  • 博客访问: 479105
  • 博文数量: 144
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1190
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 20:16
文章分类

全部博文(144)

文章存档

2017年(1)

2015年(5)

2014年(108)

2013年(30)

我的朋友

分类: C/C++

2014-05-29 11:09:17

一:用cat /proc/bus/input/devices命令可以查看event事件对应的设备,是键盘还是鼠标等等。
例如: 
[root@localhost ~]# cat /proc/bus/input/devices 
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/class/input/input0
H: Handlers=kbd event0 
B: EV=120013
B: KEY=4 2000000 3802078 f840d001 feffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7


I: Bus=0011 Vendor=0002 Product=0005 Version=0000
N: Name="ImPS/2 Generic Wheel Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input1
H: Handlers=mouse0 event1 
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103


I: Bus=0003 Vendor=0e0f Product=0003 Version=0102
N: Name="VMware VMware Virtual USB Mouse"
P: Phys=usb-0000:02:00.0-1/input0
S: Sysfs=/class/input/input2
H: Handlers=mouse1 event2 js0 
B: EV=f
B: KEY=ffff0000 0 0 0 0 0 0 0 0
B: REL=140
B: ABS=3


I: Bus=0003 Vendor=0e0f Product=0003 Version=0102
N: Name="VMware VMware Virtual USB Mouse"
P: Phys=usb-0000:02:00.0-1/input1
S: Sysfs=/class/input/input3
H: Handlers=mouse2 event3 
B: EV=7
B: KEY=ffff0000 0 0 0 0 0 0 0 0
B: REL=143


I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/class/input/input4
H: Handlers=kbd event4 
B: EV=40001
B: SND=6


二:
linux/input.h 这个文件定义了event事件的结构体,API和标准按键的编码等; 
struct input_event { 
    struct timeval time;  //按键时间 
    __u16 type; //事件类型 
    __u16 code; //要模拟成什么按键 
    __s32 value;//是按下还是释放 
}; 


type,指事件类型,常见的事件类型有: 
EV_KEY, 按键事件,如键盘的按键(按下哪个键),鼠标的左键右键(是非击下)等; 
EV_REL, 相对坐标,主要是指鼠标的移动事件(相对位移); 
EV_ABS, 绝对坐标,主要指触摸屏的移动事件 
code:事件的代码. 
如果事件的类型代码是EV_KEY,该代码code为设备键盘代码.0~127为键盘上的按键代码 
关于按键代码的定义,部分如下所示: 
#define KEY_RESERVED     0 
#define KEY_ESC  1 
#define KEY_1    2 
#define KEY_2    3 
#define KEY_3    4 
#define KEY_4    5 
#define KEY_5    6 
#define KEY_6    7 
#define KEY_7    8 
#define KEY_8    9 
#define KEY_9    10 
#define KEY_0    11 
#define KEY_MINUS    12 
#define KEY_EQUAL    13 
#define KEY_BACKSPACE    14 
#define KEY_TAB  15 
#define KEY_Q    16 
#define KEY_W    17 
#define KEY_E    18 
#define KEY_R    19 
#define KEY_T    20 
value: 
事件的值.如果事件的类型代码是EV_KEY,当按键按下时值为1,松开时值为0;如果事件的类型代码是EV_REL,value的正数值和负数值分别代表两个不同方向的值.

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4. #include<sys/ioctl.h>
  5. #include<string.h>
  6. #include<sys/ioctl.h>
  7. #include<fcntl.h>
  8. #include<linux/input.h>
  9. int main()
  10. {
  11.   int fd;
  12.   int a;
  13.   int readfd;
  14.   struct input_event Key;

  15.   fd=open("/dev/input/event0",O_RDWR);
  16.   if(fd==-1)
  17.   {
  18.    printf("open keyboard err:%d",fd);
  19.    //printf("")
  20.    exit(1);
  21.    }
  22.   while(1)
  23.   {
  24.   readfd=read(fd,&Key,sizeof(Key));
  25.    if(Key.value==1)
  26.    {
  27.   printf("type:%d\n",Key.type);
  28.   printf("code is:%d\n",Key.code);
  29.   printf("value:%d\n",Key.value);
  30.    }
  31.    }
  32. close(fd);
  33. return 0;
  34. }
  35. ~
  36. ~

阅读(1179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~