通过adb模拟快速的屏幕点击,小米手机亲测有效

通过adb模拟快速的屏幕点击

tips:高版本的此方法行不通了,低于Android10的可以尝试一下,高版本的可以研究一下下面这个框架

Genymobile/scrcpy

最近在做远程控制,关于这个框架欢迎评论区讨论。

想必当你看到这篇文章之前,你可能已经尝试了很多,用下面所说的这种方法:
我们都知道通过下面的命令可以模拟屏幕单击:

adb shell input tap x y

但是发现在尝试了之后,手机的响应速度非常的慢,这显然不是我们想要的结果。
分析原因,这是因为adb是java环境的,发送到手机之后,系统在写入文件,然后响应事件,这一过程就显得很繁琐,你我们有没有什么办法去直接写入事件文件呢?


下面开始讲重点,记好笔记,要考

  1. 进入adb shell命令行
  2. 输入getevent -l进入event事件的监听,这个时候命令行会block住,然后你在屏幕点击你想要点击的位置,你会发现会打印如下的信息:
    /dev/input/event1: EV_ABS       ABS_MT_TRACKING_ID   00000274            
    /dev/input/event1: EV_KEY       BTN_TOUCH            DOWN                
    /dev/input/event1: EV_KEY       BTN_TOOL_FINGER      DOWN                
    /dev/input/event1: EV_ABS       ABS_MT_POSITION_X    0000025a            
    /dev/input/event1: EV_ABS       ABS_MT_POSITION_Y    000005c3            
    /dev/input/event1: EV_SYN       SYN_REPORT           00000000            
    /dev/input/event1: EV_ABS       ABS_MT_TRACKING_ID   ffffffff            
    /dev/input/event1: EV_KEY       BTN_TOUCH            UP                  
    /dev/input/event1: EV_KEY       BTN_TOOL_FINGER      UP                  
    /dev/input/event1: EV_SYN       SYN_REPORT           00000000   
    
    ABS_MT_POSITION_X ABS_MT_POSITION_Y就是你点击的位置,都是16进制的。但是我们的重点不在这里,我们的重点是前面的路径,也就是/dev/input/event1 ,这是系统的事件节点,同样我们可以的input目录下面发现很多这样的节点:
    130|vince:/ # ls /dev/input/                                                   
    event0 event2 event4 event6 eventX mouse0 
    event1 event3 event5 event7 mice   mouse1 
    
  3. 接下来我们把尝试把点击的事件文件记录下来,一开始我尝试下面的方法:
    dd if=/dev/input/event1 of=/sdcard/event1
    
    想通过这个方法来保存事件的信息,但是系统直接提示:意思就是没有数据写出,获得的文件是空白的,这很明显不行
    1|vince:/ # dd if=/dev/input/event1 of=/sdcard/event1                          	
    ^C0+2 records in
    0+0 records out
    0 bytes transferred in 2.376 secs (0 bytes/sec)
    
  4. 然后我发现通过cat去打印event1,屏幕上面显示了一堆乱码,然后我机智的把这段乱码保存了起来:
    cat /dev/input/event1 > /sdcard/event1
    
    然后得到了一样的一行乱码
    130|vince:/ # cat /sdcard/event1                                               
    ?L?\g?9v?L?\g?J?L?\g?E?L?\g?5??L?\g?63?L?\g?1?L?\g??L?\N9?????L?\NJ?L?\NE?L?\Nvi
    
  5. 紧接着,把这个文件直接写入的event1
    dd if=/sdcard/event1 of=/dev/input/event1
    
    终于有反应了,大功告成,最后写一个循环的脚本,就可以不断的点击了,nice~~
    while : ; do dd if=/sdcard/event1 of=/dev/input/event1 ; done
    
您可以使用 `System.Diagnostics.Process` 类来运行 adb 命令,并通过 `adb shell input tap` 命令模拟点击手机屏幕。下面是一个使用 C# 调用 adb 点击手机屏幕的示例代码: ```csharp using System; using System.Diagnostics; public class AdbClickExample { public static void Main() { // 设置 adb 命令路径 string adbPath = "adb"; // 设置点击坐标 int x = 100; int y = 200; // 构建 adb 命令 string adbCommand = $"shell input tap {x} {y}"; // 创建进程对象 Process process = new Process(); try { // 配置进程启动信息 process.StartInfo.FileName = adbPath; process.StartInfo.Arguments = adbCommand; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; // 启动进程 process.Start(); // 等待命令执行完成 process.WaitForExit(); // 读取命令输出结果 string output = process.StandardOutput.ReadToEnd(); // 输出命令执行结果 Console.WriteLine(output); } catch (Exception ex) { Console.WriteLine("执行 adb 命令时出现异常:" + ex.Message); } finally { // 关闭进程对象 process.Close(); process.Dispose(); } } } ``` 您需要将上述代码中的 `adbPath` 设置为您的 adb 命令路径,并设置要点击的坐标 `x` 和 `y`。然后,您可以调用 `Main` 方法来运行该代码,它将使用 adb 命令模拟点击手机屏幕。请确保您的电脑已经安装了 adb,并且手机已经连接并启用了 USB 调试模式。 请注意,使用 adb 模拟点击手机屏幕可能需要获取 ROOT 权限,具体情况取决于您的设备和操作系统版本。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值