文章目录
Linux 键盘/鼠标 按键事件 编程
从键盘对应的字符设备文件中直接读取数据,获取键盘信息时不需要通过回车就能操作,键盘所对应的字符设备文件在/dev/input
目录下的event0-4
中的某一个,可以自己先测试到底是哪一个
如何测试?
- 先在终端进入到对应目录下,
cd /dev/input/
- 然后依次检测文件信息,使用
sudo cat event1
命令检测- 执行命令后会阻塞等待,当有按键按下时,会出现咱看不懂的二进制字符,如下
- 如果没有出现这些奇怪的东西,而是显示对应敲下的字母,就说明不是这个文件。
鼠标事件
测试了一下鼠标事件,发现在mouse0
文件下可以检测到鼠标,但是读出来的事件信息都是完全一样的。
于是,又测试了event2
文件,发现也可以检测到鼠标事件,虽然滚轮上下滑动检测不到,但是鼠标移动、左键单击、右键单击和中间单击都可用输入事件结构体读取分辨出来。
1. 头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
2. 以只读方式打开对应的字符设备文件
int fd;
if((fd = open("/dev/input/event1", O_RDONLY)) == -1)
{
perror("open error");
return -1;
}
3. 读取文件信息
使用输入事件结构体strcut input_event
,定义一个该结构体的变量,来接收输入事件信息。接收信息使用read()
函数,将按键事件写入结构体即可。
struct input_event {
struct timeval time;
// 保存输入类型,其中 EV_KEY 表示键盘,宏定义的数字是 0x01
__u16 type;
// 保存键盘输入字符的编号,每个编号对应一个值
__u16 code;
// 保存按键当前的状态值