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

步骤如下:

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. zabbix监控日志关键字

    1 添加zabbix监控项目 A.选择类型为“”zabbix客户端(主动式)“” B.键值: xx_log.log 为日志的绝对路径 connectException 为关键字 ---需根据自己需要定 ...

  2. Oracle 基础1

    oracle基础 表空间: Oracle数据库对数据的管理是基于表空间的概念来的, 各种数据的以及存储数据的优化, 实际上也是通过优化表空间来实现的 表空间分类: 永久表空间 用来存放表的数据, 视图 ...

  3. Python的安装部署

    Python的安装部署 参考:https://www.runoob.com/w3cnote/pycharm-windows-install.html 参考:https://jingyan.baidu. ...

  4. bash字符串处理

    将movie目录下的文件名写到markdown文件中 , 再转html rm index.md ; for f in `find . *.* | sort`; do [ -f $f ] &&a ...

  5. 吴裕雄--天生自然MySQL学习笔记:MySQL 正则表达式

    下表中的正则模式可应用于 REGEXP 操作符中. 实例 查找name字段中以'st'为开头的所有数据: mysql> SELECT name FROM person_tbl WHERE nam ...

  6. 元祖&字典

    #什么是元祖:元祖是一个不可变的列表(没有改的需求) #======================================基本使用============================== ...

  7. 4. react 基础 - 编写 todoList 功能

    编写 TodoList 功能 react 入口 js #src/index.js import React from 'react'; import ReactDOM from 'react-dom' ...

  8. 题解 P2016 【战略游戏】

    题目 解法跟 dalao @real_ljs 类似,但没有用到递归 [分析] 题目相当于需要求覆盖这颗树需要的最小点数 用 \(Dp_{i,0/1}\) 表示在这棵树中,以 \(i\) 为根节点的子树 ...

  9. Facebook的Libra “区块链”到底是如何运作的?

    本文深入研究了"关于Facebook Libra coin (以及更多)平台协议"的26页技术文档,并对其内容进行了分解说明.同时,我们对这53位作者表示衷心的钦佩! 以下为具体分 ...

  10. 吴裕雄--天生自然TensorFlow高层封装:Estimator-自定义模型

    # 1. 自定义模型并训练. import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist i ...