【发布时间】:2013-06-18 16:45:44
【问题描述】:
是否可以在 ios 越狱和越狱涉及的所有元素上模拟特定屏幕坐标中按下特定外部键盘(通过相机连接套件或蓝牙的 USB)上的特定键的触摸事件?
我会用它来用脚按下应用程序中的按钮(幅度),我想将键盘用作脚踏开关。
仅供私人使用。没有 Appstore 或 Cydia。 谢谢。
【问题讨论】:
标签: ios events keyboard touch external
是否可以在 ios 越狱和越狱涉及的所有元素上模拟特定屏幕坐标中按下特定外部键盘(通过相机连接套件或蓝牙的 USB)上的特定键的触摸事件?
我会用它来用脚按下应用程序中的按钮(幅度),我想将键盘用作脚踏开关。
仅供私人使用。没有 Appstore 或 Cydia。 谢谢。
【问题讨论】:
标签: ios events keyboard touch external
您可以在计算机上编写脚本,并使用键盘和鼠标基于模拟触摸库来控制您的 iOS 设备。
iOS13-SimulateTouch 是一个开源库,可让您在系统级别模拟触摸事件。您可以使用任何编程语言编写脚本,以远程或本地在您的 iOS 设备上模拟触摸事件。请在[Github] iOS13-SimulateTouch查看源代码
iOS 11.0 - 13.6 系统级触控模拟 iOS13 模拟触控
需要越狱设备
这个库让您只需一行代码即可在 iOS 11.0 - 13.6 上模拟触摸事件!所有源代码将在稍后发布。
Python Version
import socket
import time
# event types
TOUCH_UP = 0
TOUCH_DOWN = 1
TOUCH_MOVE = 2
SET_SCREEN_SIZE = 9
# you can copy and paste this method to your code
def formatSocketData(type, index, x, y):
return '{}{:02d}{:05d}{:05d}'.format(type, index, int(x*10), int(y*10))
s = socket.socket()
s.connect(("127.0.0.1", 6000)) # connect to the tweak. Replace "127.0.0.1" with the ip address of your device
s.send(("1"+formatSocketData(SET_SCREEN_SIZE, 0, 2048, 2732)).encode()) # tell the tweak that the screen size is 2048x2732 (your screen size might differ). This should be send to the tweak every time you kill the SpringBoard (just send once)
time.sleep(1) # sleep for 1 sec to get setting size process finished
s.send(("1"+formatSocketData(TOUCH_DOWN, 7, 300, 400)).encode()) # tell the tweak to touch 300x400 on the screen
# IMPORTANT: NOTE the "1" at the head of the data. This indicates the event count and CANNOT BE IGNORED.
s.close()
其实触摸只有一行:
s.send(("1"+formatSocketData(TOUCH_DOWN, 7, 300, 400)).encode())
简洁明了。
执行触摸移动
s.send(("1"+formatSocketData(TOUCH_MOVE, 7, 800, 400)).encode()) # tell the tweak to move our finger "7" to (800, 400)
进行修饰
s.send(("1"+formatSocketData(TOUCH_UP, 7, 800, 400)).encode()) # tell the tweak to touch up our finger "7" at (800, 400)
组合起来
s.send(("1"+formatSocketData(TOUCH_DOWN, 7, 300, 400)).encode())
time.sleep(1)
s.send(("1"+formatSocketData(TOUCH_MOVE, 7, 800, 400)).encode())
time.sleep(1)
s.send(("1"+formatSocketData(TOUCH_UP, 7, 800, 400)).encode())
首先手指触摸 (300, 400),然后移动到 (800, 400),然后“离开”屏幕。所有触摸事件均无延迟地执行。
数据字段应始终为十进制数字,指定如下
注意:未来可能会更新使用情况。我会更新这篇文章,但请关注 github Usage_iOS13-SimulateTouch
Event Count(1 digit):指定单个事件的计数。如果您要同时发送多个事件,只需增加事件计数并将事件附加到数据中即可。
Type(1位):指定单个事件的类型。
支持的事件类型:
Touch Index(2位):Apple支持多点触控,所以你必须在发布触摸事件时指定手指的索引。手指索引的范围是1-20(0是保留的,不要用0作为手指索引)。
x Coordinate(5位):你想触摸的地方的x坐标。前 4 位为整数部分,最后一位为小数部分。例如,如果要在屏幕上触摸 (123.4, 2432.1),则应为此填写“01234”。
y Coordinate(5位):你要触摸的地方的y坐标。前 4 位为整数部分,最后一位为小数部分。例如,如果要在屏幕上触摸 (123.4, 2432.1),则应为此填写“24321”。
因此,如果您想用手指“3”在屏幕上触摸(123.4、1032.1),只需使用套接字连接到调整并发送“11030123410321”。
数字 0:“1”表示只有一个事件要执行。
数字1:“1”表示事件类型:TOUCH_DOWN(标志为1)。
数字 2-3:“03”表示此事件由手指“3”执行。
第4-8位:“01234”表示x坐标123.4。
第9-13位:“10321”表示y坐标1032.1。
触摸坐标不取决于您设备的方向。请参阅下图以获取更多信息。无论您如何放置设备,屏幕上的点击点不会改变。
【讨论】: