July 2019

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

Continue reading...

Unable to install module xxx kernel xxx: Missing kernel modules tree.

原因一:没有安装linux-headers或者linux-lts-headers

原因二:安装的内核和headers版本不匹配

如果是版本降级,可以到/var/cache/pacman/pkg

执行

 

 …

Continue reading...

Vim获取特定行作为字符串复制给变量

let headTxt=getline(1) 获取第一行赋值给字符串headTxt

可以将上述逻辑放在一个函数里,绑定到特定键盘,当调用这个函数的时候,自动判断,如果是关于Gtk的C文件,则执行第一个gcc编译操作,否则执行第二个。…

Continue reading...

C语言怎样用方向键(光标)移动修改输入的字符进行交互操作

1.最简单的例子如下:

需要使用到readline库,还有很多功能自行挖掘。

原来用C语言时一直想用交互操作的功能而不得,也没查找到相关方法,网上说的都不是想要的,仅仅是读取输入的是哪个方向键,根本不能交互操作。

后来在用Python的时候发现了有import readline这个东西,又Python有些就是C语言封装好的库,反推回去C语言应该是有这个东西的,按着readline关键字的方向去查找果然被我找到了。

2.编译

需要指明链接的库,不然会报错

3.运行

之后可以输入字符,或者用方向键移动光标到特定字符进行修改、删除等操作,不过不能用上下键切换历史输入,这个应该是要自己用库函数编写。

二更:

找到了,是因为没有将输入的字符串加入历史中,可以在执行readline后调用add_hisotry(ch),测试用例如下。

演示示例:

Continue reading...