博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 按键精灵,通过getevent记录后发出
阅读量:5112 次
发布时间:2019-06-13

本文共 2318 字,大约阅读时间需要 7 分钟。

最近需要写这个程序。网上没看着太好的,还是自己动手写一个。大概的思想是通过getevent获得屏幕移动的数据,将数据以2进制格式保存,用c语言读取后写入到屏幕。

首先用android提供的getevent进行事件记录,直接输入getevent可以看到你的屏幕是哪个event。

然后getevent -t /dev/input/eventX,输入完之后去操作屏幕,录入你想录的操作,输出的格式是

时间 数字 数字 数字

不同的板子的时间这一块不太一样,要具体问题具体分析。一般来说是形如[10.123]。这里不能直接转换成sendevent的脚本,因为sendevent中,那三个数字通过参数进入,需要用atoi转换成整数写入设备,而event在数秒内就可以有数百个,这样的字符串转整数通常是手机平台不能流畅完成的。所以用下面一段python3代码:

import structtime0=0rectimes=0lastrec=0with open("e:\\ev1.txt",'r') as f, open("e:\\rec2.touch",'wb') as wf, open("e:\\rec2.index",'wb') as id:    for line in f:        line=line.split(' ')        time1=int(float(line[0][1:-1])*1000000)         print(line)        if (time1-time0)>0:            #write sleeptime, and readtimes            if rectimes==0:                id.write(struct.pack('ii',0,rectimes-lastrec))            else:                id.write(struct.pack('ii',time1-time0,rectimes-lastrec))                            lastrec=rectimes        time0=time1        rectimes+=1
#python -> C struct        # 2byte __u16 type        # 2byte __u16 code        # 4byte __s32 value
wf.write(struct.pack("HHI",int(line[1],16),int(line[2],16),int(line[3].strip(),16)))

 然后写了一段C代码在板子上跑,这里要交叉编译

#include 
#include
#include
#include
#include
#include
#include
#include
//#include
// this does not compile#include
#include
struct input_event { struct timeval time; __u16 type; __u16 code; __s32 value;};int main(int argc, char *argv[]){ int fd,fi,ft; int ret; int version; struct input_event event; if(argc != 3) { fprintf(stderr, "use: %s device filename\n", argv[0]); return 1; } char TouchFile[40],IndexFile[40]; strcpy(TouchFile,argv[2]); strcpy(IndexFile,argv[2]); strcat(TouchFile,".touch"); strcat(IndexFile,".index"); ft = open(TouchFile,O_RDONLY); fi = open(IndexFile,O_RDONLY); fd = open(argv[1], O_RDWR);while(1){ struct input_event event; memset(&event, 0, sizeof(event)); int sleeptime; if(read(fi,(char*)&sleeptime,4)==0) { while(read(ft,&(event.type),8)) { write(fd, &event, sizeof(event)); } return 0; }// printf("sleeptime:%d\n",sleeptime); int readtimes; read(fi,(char*)&readtimes,4);// printf("readtimes:%d\n",readtimes); int i=0; char buffer[8]; for(;i

 

转载于:https://www.cnblogs.com/zhangzheng/p/3230476.html

你可能感兴趣的文章
[BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】
查看>>
【JS笔记】5.3 Date类型
查看>>
格式话输出
查看>>
微信小程序访问后台出现 对应的服务器证书无效。控制台输入 showRequestInfo() 可以获取更详细信息。...
查看>>
免费 SVN 服务器收集
查看>>
页面跳转
查看>>
获取当前屏幕显示的viewcontroller
查看>>
Scrapy抓取jobbole数据
查看>>
解决asp.net core 日期格式 datetime Json返回 带T的问题
查看>>
循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi
查看>>
SQLServer版本
查看>>
【Win10】让 TextBlock 按字符换行
查看>>
Mvvm Light Toolkit 入门
查看>>
基于Token的WEB后台认证机制
查看>>
写入多线程Log4net 多线程写入
查看>>
产品苹果乔布斯和盖茨眼中真实的对方
查看>>
进程信号Linux操作系统分析(2)- 进程的创建与可执行程序的加载
查看>>
查询删除SQL语句知识总结
查看>>
类型串php中null和false和0之间的区别
查看>>
电路板排列0032算法笔记——电路板排列问题和连续邮资问题回溯法求解
查看>>