资源描述:
《linux下获取按键响应事件》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、linux下获取按键响应事件1、问题通过一个死循环将读取键盘对应的设备文件将触发键盘事件在屏幕上打印出来,按esc退出程序代码是在unbuntu10.04编译执行通过的2、input_event描述在Linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作就是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作接口,因为Input子系统已经完成了文件操作接口linux/input.h这个文件定义了
2、event事件的结构体,API和标准按键的编码等;structinput_event{ structtimevaltime; //按键时间 __u16type;//事件类型 __u16code;//要模拟成什么按键 __s32value;//是按下还是释放};type,指事件类型,常见的事件类型有:EV_KEY,按键事件,如键盘的按键(按下哪个键),鼠标的左键右键(是非击下)等;EV_REL,相对坐标,主要是指鼠标的移动事件(相对位移);EV_ABS,绝对坐标,主要指触摸屏的移动事件code:事件的代码.如果事
3、件的类型代码是EV_KEY,该代码code为设备键盘代码.0~127为键盘上的按键代码关于按键代码的定义,部分如下所示:#defineKEY_RESERVED 0#defineKEY_ESC 1#defineKEY_1 2#defineKEY_2 3#defineKEY_3 4#defineKEY_4 5#defineKEY_5 6#defineKEY_6 7#defineKEY_7 8#defineKEY_8 9#defineKEY_9 10#defineKEY_0 11#def
4、ineKEY_MINUS 12#defineKEY_EQUAL 13#defineKEY_BACKSPACE 14#defineKEY_TAB 15#defineKEY_Q 16#defineKEY_W 17#defineKEY_E 18#defineKEY_R 19#defineKEY_T 20value:事件的值.如果事件的类型代码是EV_KEY,当按键按下时值为1,松开时值为0;如果事件的类型代码是EV_REL,value的正数值和负数值分别代表两个不同方向的值.3、相关代码key_sim
5、ulator.cJava代码1.#include2.#include3.#include4.#include5.#include6.intmain()7.intkeys_fd;8.charret[2];9.structinput_eventt;10.keys_fd=open("/dev/input/event2",O_RDONLY);11.if(keys_fd<=0)12.printf("open/dev/input/event2deviceerror!");13.return0;14.while(1)15.if(read
6、(keys_fd,&t,sizeof(t))==sizeof(t))16.if(t.type==EV_KEY)17.if(t.value==0
7、
8、t.value==1)18.printf("key%d%s",t.code,19.(t.value) ? "Pressed" : "Released");20.if(t.code==KEY_ESC)21.break;22.close(keys_fd);23.return0;#include#include#include#include#includeintmain(){ int
9、keys_fd; charret[2]; structinput_eventt; keys_fd=open("/dev/input/event2",O_RDONLY); if(keys_fd<=0) { printf("open/dev/input/event2deviceerror!"); return0; } while(1) { if(read(keys_fd,&t,sizeof(t))==sizeof(t)) { if(t.type==EV_KEY) if(t.value=
10、=0
11、
12、t.value==1) { printf("key%d%s",t.code, (t.value) ? "Pressed":"Released"); if(t.code==KEY_ESC) break;