一:用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的正数值和负数值分别代表两个不同方向的值.
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<unistd.h>
-
#include<sys/ioctl.h>
-
#include<string.h>
-
#include<sys/ioctl.h>
-
#include<fcntl.h>
-
#include<linux/input.h>
-
int main()
-
{
-
int fd;
-
int a;
-
int readfd;
-
struct input_event Key;
-
-
fd=open("/dev/input/event0",O_RDWR);
-
if(fd==-1)
-
{
-
printf("open keyboard err:%d",fd);
-
//printf("")
-
exit(1);
-
}
-
while(1)
-
{
-
readfd=read(fd,&Key,sizeof(Key));
-
if(Key.value==1)
-
{
-
printf("type:%d\n",Key.type);
-
printf("code is:%d\n",Key.code);
-
printf("value:%d\n",Key.value);
-
}
-
}
-
close(fd);
-
return 0;
-
}
-
~
-
~
阅读(1234) | 评论(0) | 转发(0) |