Linux下C语言检测鼠标事件及模拟键盘操作

目标:

/* * 通过操作鼠标设备文件,监听当前鼠标左键双击事件 * 以及长按左键进行区域选择的事件。 * * 通过键盘设备文件event3进行模拟键盘操作 * * 当检测到双击或者区域选择操作,在操作结束后, * 模拟键盘发送CTRL-C * */

设计思路:

一:鼠标事件检测:

1.只读方式打开鼠标设备文件/dev/input/mice

2.按照协议定义的数据格式,从设备文件读出3个字节的数据存于buf[3]。

buf[0]低3位依次为左键,右键以及中键,按下鼠标的对应键其buf[0]对应位被置1,为了提取出低三位的对应值,作逻辑与操作:&0x7即可。

  • buf[0] & 0x07得出鼠标键值,1为左键,2为右键,4为中键
  • buf[1] 为 x坐标偏移值
  • buf[2] 为y坐标偏移值

3.将获得的鼠标键值存于一个历史数组history[4],且为循环覆盖存入

4.通过判断history[4]数据格式,推断当前鼠标事件

二:模拟键盘操作

1.以读写方式打开键盘设备文件 /dev/input/event3, 不一定是event3,如果使用的是xorg,可以通过以下命令查看键盘对应的设备文件是哪一个:

2.通过向键盘设备文件按一定方式写入一定格式的数据模拟键盘操作

三:代码示例

命名:DetectMouse.c

编译运行:

程序现象,如果是在终端进行双击或按住左键选择区域,程序停止运行,如果是在其他窗口,选中的文字将被复制到剪贴板。