通过直接操作驱动来监控键盘,只要程序一旦在后台启动,无论在任何页面都可以监控到按键的数值。

步骤如下:

1.找到键盘挂在点:有两种方法

  方法一:在   /dev/input路径下通过  cat even..(1,2,3,4.。)打印操作,并按下键盘看哪个出现的不是回写(乱码状态),就是键盘挂载点,我的是event1;鼠标是event2;

  方法二:在命令行中输入  cat /proc/bus/input/devices 查看设备对应的结点(文件)

2.打开键盘文件:

  #define      DEV      "/dev/input/event1"

  int keyFd;

  keyFd=open(DEV,RDONLY);

3.读键盘数据

  问:读的数据应该以什么类型存放?

  解:所有的输入设备都公用一个头文件,即共用这一个框架,头文件为<linux/input.h>,

/////////////////////////////这是头文件中的结构体,不用写//////////////////////////////////////////////////////////////////////////// 

    struct input_event {
        struct timeval time;
            __u16 type;//按键类型

       —u16code;//按键值
           __s32 value;//按下为1,长按为2,松开为0
        };

//////////////////////////////////////////////////////////////////////////////////////////////////////

    int ret;      struct input_event    ev;

    ret=read(devFd,&ev,sizeof(ev));

  每一次从键盘读到的值都存在这样的一个结构体中;

5.访问数据

  通过结构体变量ev可以访问数据。

代码示例:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
//设备头文件
#include <linux/input.h>

//cat /proc/bus/input/devices 查看设备对应的结点(文件)
#define KEY_DEV "/dev/input/event3"

char mapKey(unsigned short code)
{
switch(code){
case KEY_A:return 'a';
case KEY_B:return 'b';
case KEY_C:return 'c';
case KEY_D:return 'd';
case KEY_E:return 'e';
case KEY_F:return 'f';
case KEY_G:return 'g';
case KEY_5:return '5';
case KEY_KP4:return '4';
case KEY_ENTER:return '\n';
default:return '?';
}
}

int main(void)
{
int devFd,ret;
//input 子系统设备以该结构体提交一个事件
struct input_event ev;

devFd=open(KEY_DEV,O_RDONLY);
if(devFd==-1)
{
perror("open Keyboard");
return 1;
}

system("clear");
system("stty -echo");

//读按键数据
while(1)
{
ret=read(devFd,&ev,sizeof(ev));
if(ret==-1)
{
perror("read error");
break;
}
switch(ev.type){
case EV_SYN:;break;
case EV_KEY:
if(ev.value==1 || ev.value==2)
{
putchar(mapKey(ev.code));
fflush(stdout);
}
break;
case EV_REL:
printf("相对 code:%d value:%d\n",ev.code,ev.value);break;
case EV_ABS:
printf("绝对 code:%d value:%d\n",ev.code,ev.value);break;
}
}

system("stty echo");
close(devFd);
return 0;
}

    

input之按键输入的更多相关文章

  1. linux输入子系统(input subsystem)之按键输入和LED控制

    实验现象:在控制台打印按键值,并且通过按键控制相应的LED亮灭. 1.代码 input_subsys_drv.c #include <linux/module.h> #include &l ...

  2. adb shell命令模拟按键/输入input使用keycode 列表详解

    在adb shell里有一个非常使用的命令,模拟按键输入,这里首先不要理解为是键盘的模拟按键,下面命令的使用和键值做一个详解. input命令格式 adb shell input keyevent & ...

  3. ADB——模拟手机按键输入

    基本命令 adb 模拟按键输入的命令主要通过 input 进行 Usage: input [<source>] <command> [<arg>...] The s ...

  4. adb命令模拟按键输入keycode

    adb命令模拟按键输入keycode 2017年05月18日 14:57:32 阅读数:1883 例子: //这条命令相当于按了设备的Backkey键 adb shell input keyevent ...

  5. linux下如何模拟按键输入和模拟鼠标【转】

    转自:http://www.cnblogs.com/leaven/archive/2010/11/30/1891947.html 查看/dev/input/eventX是什么类型的事件, cat /p ...

  6. 控制input中只能输入固定格式内容

    onkeyup 事件会在键盘按键被松开时发生,onafterpaste 是粘贴触发,没有这个事件用onblur吧,失去焦点时发生输入完,点其他地方就会执行. <html lang="e ...

  7. 关于调整input里面的输入光标大小

    input输入框用一个背景图模拟,设置height和line-height一样的高度,使里面的输入文字能够居中, 在FF下出现的情况是:点击input时,输入光标其实上跟input的height一样高 ...

  8. 使用iScroll时,input等不能输入内容的解决方法

    做移动平台的应用,使用iscroll使屏幕上下滑动.发现当使用iscroll后,input等不能输入内容了.只要在iscroll.js文件中加入如下代码就ok了. function allowForm ...

  9. 使用iScroll时,input等不能输入内容的解决方法(share)

    最近做移动平台的应用,使用iscroll使屏幕上下滑动.发现当使用iscroll后,input等不能输入内容了.只要在iscroll.js文件中加入如下代码就ok了. function allowFo ...

随机推荐

  1. map/vector遍历删除

    map遍历删除 map<int, vector<int>>::iterator it = g_map.begin(); for (; it != g_map.end(); /* ...

  2. 18 12 14 python提高 装饰器

    ---恢复内容开始--- 装饰器还真的有些没看懂  一个任意传参的装饰器   一个通用装饰器 def set_func(func): print("------开始进行装饰") # ...

  3. 桥接 brctl

    把eth0和wlan0桥接在一起 作用:测试wlan0网卡的并发性能   两个网卡桥接后把linux主机模拟成一个“无线路由交换机” Vi   br0.sh #!/bin/bash ifconfig ...

  4. 给adobe acrobat reader 添加图片注释

    首先展示一下  我添加注释的结果, 下面是我的做法: 在Adobe Acrobat 中打开Sample.pdf文档,点开文档右边的“工具”-“内容”-选择“编辑对象”,鼠标光标变成实心箭头+右下角小方 ...

  5. house_cat 's blog

    本人蒟蒻,ACM退役选手 可能会刷刷CF,写一下笔记,学一点JAVA 欢迎指正:QQ:1468580561 不要忘记努力,不要辜负自己

  6. PAT Basic 反转链表 (25) [链表]

    题目 给定⼀个常数K以及⼀个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5→6, ...

  7. PAT Basic 1070 结绳(25) [排序,贪⼼]

    题目 给定⼀段⼀段的绳⼦,你需要把它们串成⼀条绳.每次串连的时候,是把两段绳⼦对折,再如下图所示套接在⼀起.这样得到的绳⼦⼜被当成是另⼀段绳⼦,可以再次对折去跟另⼀段绳⼦串连.每次串 连后,原来两段绳 ...

  8. Mysql 环境部署

    1.Window 1.1 下载软件: https://dev.mysql.com/downloads/mysql/ 依次点击上图 红色框中按钮 1.2 安装软件 1.2.1 解压软件 正常解压即可  ...

  9. axios新手实践实现登陆

    其实像这类的文章网上已经有很多很好的,写这篇文章,相当于是做个笔记,以防以后忘记 用到的:1. vuex 2.axios 3.vue-route 登陆流程为:1.提交登陆表单,拿到后台返回的数据 2. ...

  10. 2.监控利器nagios手把手企业级实战第一部

    1.   什么是Nagios?    Nagios是一款开源的网络及服务的监控工具,功能强大,灵活性强,需要注意的是,其服务端只能在linux上面安装.            Nagios可以进行分布 ...