安卓手机配置通用多屏协同及自动化脚本

安卓手机配置通用多屏协同及自动化脚本

1. 背景

某天刷微信视频号的时候,发现有些东西改版了:之前的一个star按钮被改成了点赞,然后小红心没变,增加了把视频号的视频添加到微信收藏的功能。我一直以为star是收藏,小红心是点赞,然后给一堆乱七八遭的都点了小红心。现在看来,star是什么不清楚,可能之前确实是收藏,只不过现在把这个迁移到了微信收藏,然后改成点赞。倒是小红心看上去好像应该描述成喜欢,听上去有点像知乎那一套。

就是,点赞代表认同回答的内容和描述所表现出来的整体性倾向,有点偏向于对话题的认同;喜欢代表偏好内容里面的细节或者是答主的风格等等,有点偏向于用户的个性化喜好;然后感谢代表认可答主为了作出这篇回答而付出的努力。

总之这些指标有点乱,我这里也只是臆测,描述的不一定对,而且搞这么多指标不见得有什么作用。知乎貌似很早就取消了感谢,然后在最近的更新当中隐藏喜欢到了二级界面,回答底部只剩下点赞收藏评论,甚至反对都被收到了二级界面。

话题扯远了,说回来,就是我感觉改版之后,这一堆喜欢看上去挺碍眼的,于是就想批量取消掉。但是简单查了一下运行在安卓上的脚本,发现貌似都需要开一些权限或者装装模块,感觉有那么点危险。刚好看到了华为系的多屏协同,于是就寻思把手机投影到电脑上,然后电脑端模拟鼠标点击。

2. 过程

2.1. 软件

总之查了一堆乱七八遭的教程,找到了一个 AnLink1,接着发现它是基于Scrcpy2的魔改。我寻思也用不到那么多功能,而且对自动化脚本而言肯定是简单的好,于是就决定用这个原生的轮子。啊,对,我还发现B站有大佬用类似的思路做了个安卓自动化软件3,后来还出了个升级版4。这软件使用挺简单的,属于傻瓜式操作了。但我感觉用不到这么复杂的功能,懒得研究,还是继续折腾小脚本吧。

啊,对,还有一件事,我用的Scrcpy是旧版,现在都到2.4了,理论上来说没啥影响,但还是贴一下信息:

PS C:\Windows> scrcpy --version
scrcpy 2.1.1 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.28.0 / 2.28.0
 - libavcodec: 60.3.100 / 60.3.100
 - libavformat: 60.3.100 / 60.3.100
 - libavutil: 58.2.100 / 58.2.100
 - libusb: - / 1.0.26
PS C:\Windows>

以及,AnLink好久没更新了,它基于的是比我用的还旧的Scrcpy,所以共享手机音频到电脑用的好像还算蓝牙,也就是说如果想在共享屏幕上听声音,那在有线或者无线的基础上,连接上蓝牙。

但是从我用的版本开始,Scrcpy已经支持通过数据线共享音频了。至于无线网络的连接方式是否支持音频,这个我还不太清楚。

2.2. 启动

2.2.1. 手机

Scrcpy貌似是也支持无线网络连接的,但是我感觉不如有线来的直接简单且快速,总之是得先去手机上调一下设置:

首先开启开发者模式,嗯,各个机型开启的方式不同,大概就是连续点击系统版本三到五次吧,在此不做赘述,有需要的话去其他地方查一下,很简单的。

其次,进入开发者选项,不同机型的位置也不一样,需要自行查找

接着,当然是开启开发者选项,然后下滑开启USB 调试以及USB 调试(安全设置)

然后每次手机连接到电脑之后,貌似通知栏还会弹出来USB 用于,也就是仅限充电传输文件传输照片什么的,我一般选的是仅限充电,反正看上去也没啥影响。

不过倒是,我记得,有段时间貌似连接不稳,就是有线接上之后,电脑没有识别到手机,我记得好像也有原因来着,忘记当时咋解决的了,反正不行就尝试多插拔几次。

2.2.2. 电脑

我在win 10上直接运行命令就好了:

scrcpy --shortcut-mod=lctrl --always-on-top --window-title="My device" --stay-awake

我一般是加这几个参数,使用left ctrl,保持窗口置顶,定义窗口名称,保持窗口常亮。其他参数可以去官方文档5里面找,参数选项有好多种,这里只列举了一个文档。

然后还有一些常用快捷键:

+-----------------------------------------+---------------------------------------+
| Click on HOME                           | MOD+h | Middle-click                  |
+-----------------------------------------+---------------------------------------+
| Click on BACK                           | MOD+b | MOD+Backspace | Right-click²  |
| Click on APP_SWITCH                     | MOD+s | 4th-click³                    |
| Click on MENU (unlock screen)| MOD+m                                 |
| Click on VOLUME_UP                      | MOD+↑ (up)                            |
| Click on VOLUME_DOWN                    | MOD+↓ (down)                          |
| Click on POWER                          | MOD+p                                 |
| Turn device screen off (keep mirroring) | MOD+o                                 |
| Turn device screen on                   | MOD+Shift+o                           |
| Expand notification panel               | MOD+n | 5th-click³                    |
| Collapse panels                         | MOD+Shift+n                           |
+-----------------------------------------+---------------------------------------+

不过这样启动屏幕共享感觉有点麻烦。虽然在命令行启动能够看到详细的调试信息,如果出错了也好做出调整。但是需要有一个窗口一直活跃在前台,看上去不够优雅,于是我就在思考能不能把这个东西转到后台去。

我最早的想法是搞成任务栏图标,等于说是把活跃窗口移动到右下角的托盘。查了下教程感觉好像挺复杂,于是就转换思路,看能不能在命令行启动后直接转为后台,从而避免终端保留在前台。然而还没找到什么有效的办法。后来还有个思路,写个exeScrcpy作为子进程调起不就好了。结果还是不行,调起Scrcpy会出现一个黑框,也就是命令行窗口。继续查相关的方法,一时之间没有找到教程。

偶然间翻看Scrcpy目录的时候,发现了一个文件叫scrcpy-noconsole.vbs,看着名称就感觉方法藏在其中。这vbs双击就能运行,我记得早年间的病毒和整蛊小程序就是用这个。右键记事本,看了下代码,发现关键在于cmd命令带了个/c参数。查了下教程6发现,这个参数的意思就是执行命令后关闭窗口,当然cmd命令也还有其他很多参数。

总之,查个教程7,结合上文:

#include <windows.h>
int main()
{
  WinExec("cmd /c scrcpy --shortcut-mod=lctrl --always-on-top --window-title=\"My device\" --stay-awake",SW_HIDE);
  return 0;
}

// gcc -mwindows launch.c launch.o -o launch.exe

以及需要加个图标:

1 ICON "favicon.ico"

编译资源:

windres launch.rc -o launch.o

编译代码:

gcc -mwindows launch.c launch.o -o launch.exe

然后双击exe就好,这个相比于自带的vbs,可以调整启动命令的参数

效果:

在这里插入图片描述

需要关闭的时候,直接右上角点 × \times ×,然后拔掉连接线

还有,这种方式没有调试信息,如果不能运行成功,建议去命令行启动,或许会有报错信息,方便调试。

2.3. 脚本

直接python调包,用截屏软件确定坐标

import pyautogui as ui  

import random

import time

ui.PAUSE = 1

for idx in range(0,100):

  ui.moveTo(
     1827
    ,910
    ,duration=1
  )
  
  print("Finish move to screen")

  ui.dragRel(
     0
    ,-600
    ,duration=1
  )
  
  print("Finish drag to next")

  random_sleep_time = random.randint(0,5)

  print(f"Random sleep {random_sleep_time} seconds")

  time.sleep(random_sleep_time)

  ui.click(
     1827
    ,930
    ,button='left'
    ,duration=1
  )
  
  print(f"Now finish {idx+1}")

  1. AnLink安联 | AnLink ↩︎

  2. GitHub - Genymobile/scrcpy: Display and control your Android device ↩︎

  3. 自制安卓自动化神器,无需编程也可解放双手!_哔哩哔哩_bilibili ↩︎

  4. 4年心血,更新97次后推翻重做,只为打造安卓最强玩机工具箱!_哔哩哔哩_bilibili ↩︎

  5. scrcpy/doc/connection.md at master · Genymobile/scrcpy · GitHub ↩︎

  6. cmd [/c|/k] [/s] [/q] [/d] - 知乎 ↩︎

  7. WinExec打开exe文件 - 快乐的正能量 - 博客园 ↩︎

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值