如何把拦截屏幕事件并把事件发送到别的手机

想实现一个功能,就是让其他越狱系统的手机执行我主控手机的相同操作。思如如下。

  1. 把当前操作的手机(主控)屏幕点击的事件拦截下来,然后通过网络转发到别的被控手机
  2. 其他被控的手机接收到主控手机的事件后,直接执行该事件的操作。

技术难点.

  1. 屏幕点击的事件如何拦截下来,屏幕用户操作的事件传递流程
  2. 如何把事件UIEvent或者其他类进行归档或者事件的参数传递给其他手机。
  3. 如何把网络数据包转成UIEvent,然后主动调用参数。

感谢各位大佬分享你们的方法,谢谢。

现在窝在家里里面,没啥事可做,有没有做过相应的研究的,麻烦分享下,让少走点弯路。谢谢。为了不沉贴,我自己要顶一下。

看screendump的源码


是这个源码吗?

应该是的 你看看他下面的kIOEvent

这几天也在研究 但是我比较菜搞了半天没搞出来

厉害,感谢!!

我通过拦截了SpringBoard的- (void)sendEvent:(UIEvent *) event方法,

- (void)sendEvent:(UIEvent *) event; 

让后通过setValue:forKey的方法修改timestamp的值,

NSTimeInterval timestamp =  [[NSProcessInfo processInfo] systemUptime];
[event setValue:[NSNumber numberWithDouble:timestamp] forKey:@"_timestamp"]; 

然后直接过了一段时间后主动调用SpringBoard对象的sendEvent的方法,系统没有任何反应,这是什么原因呢?

能不能直接直接拦截Springboard的事件,然后记录下Event的参数然后转发给另一个手机的SpringBoard, 收到该事件后,初始化改事件,然后调用SpringBoard的sendEvent方法呢?

感谢各位大神拍砖,谢谢。

因为firstResponder被拦截了就不会往下一层传递了?

可能需要看看CFRunLoop的相关知识 这我就不清楚了

实现了个跟你需求差不多的功能,正在上传视频

:eyes:⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠

https://b23.tv/av85952829
https://b23.tv/av85970513

3 Likes

能将下思路吗?

你这个实现很丝滑啊。

另外问下,你这个用的一个白屏幕,是一个专门获取屏幕事件用的吗?

白屏的是个简单app,接收端用了rocketsocket,还有封了一层ioket作为模拟触控,我迟些时候整理一下再开源辽

3 Likes

感谢。太牛逼了。

我觉得可能是我没有把整个事件,包括事件began, moved, end整个过程发给它导致的。

厉害了,黑科技。

什么时候能开源呢?

问下,现在的ios7以上,GSSendEvent方法发送事件,但是 GSCopyPurpleNamedPort 方法获取端口的不行了,如何模拟发送事件呢?谢谢。