组件

Total Control 是一个由许多组件/模块和功能组成的大型系统:

  • Total Control application in Windows (TCW),系统的主要应用程序。
  • Android 版 Total Control 应用程序 (TCA)。 可以在 Google Play 商店下载或与下载的软件包捆绑在一起,Total Control 将自动安装。
  • 总控制查看器 (TCV)。 通过购买可选的“设备控制”,它允许Android设备控制TCW中的部分功能,可以访问主设备的屏幕。

TCW 中有许多应用程序:

  • 连接。 在一个或多个 Android 设备中建立 TCW 和 TCA 之间的连接(和权限)。
  • 控制应用程序。 有两种方法可以控制连接的 Android 设备。 WDM – Windows 桌面模式显示每个窗口一个 Android 设备。 MDCC – 多设备控制中心是一个用于访问和控制多台设备的大屏幕。
  • 坐标与物体。 单击 (x, y) 与文本为 OK 的按钮。 坐标对于控制具有相同型号和类型的多个设备很有用。 对象对于具有多种分辨率和尺寸的设备很有用。 推荐使用对象模型,当被测应用程序发生变化时更容易编写脚本,获取文本比 OCR 更快更准确。
  • 脚本。 提供 JavaScript 和 REST API,允许用户控制和访问多个设备坐标和对象模型。 内部开发的 AAIS 可用于轻松生成脚本,与 JavaScript 无缝集成,并且可以使用单个脚本控制多个设备。
  • AAI。 所有对象模型的总称,包括查询语言、UI Explorer、FindNode 和 AAIS。

连接

一旦安装了Total Control,对于每一个安卓设备来说,首要的任务就是建立USB连接,这个过程比较繁琐但也很重要,有两个方面:

  • 通过 USB 授予 adb/shell 权限,以便我们可以控制设备。
  • 将必要的软件安装到设备中。

为了获得adb/shell权限,需要打开“开发者选项”中的“USB调试”,一旦打开正确的adb设备驱动程序,Total Control就可以访问设备并使用adb安装“ Total Control”应用程序和 NDK 软件安装到设备中。 Windows 10 可以识别大部分安卓设备,Windows 7 和 XP 需要 adb 设备驱动,我们提供了一个通用的 adb 设备驱动,应该可以在大多数设备上工作,如果它不能工作,可能需要访问设备制造商网站来 下载 adb 设备驱动程序。

Total Control 自动检测 USB 设备的存在并要求确认连接,它提供了有关如何调出“开发人员选项”并为各种设备型号打开“USB 调试”的说明,在设置过程中,设备(不是 PC ) 可能会弹出一条消息以确认连接。通过 USB 建立连接是最难的部分,这是一次性设置,一旦出现“连接”按钮,您就已经正确安装了所有东西。单击“连接”按钮,您可能会看到一个设备窗口,通过屏幕上的说明测试它是否有效。

USB 连接建立后,软件已获得权限,您现在可以继续使用它或拔下 USB 并通过 WiFi 或以太网建立连接。

TCP 连接

一旦你有 USB 连接来打开设备窗口,设备已经获得 adb 权限,现在你可以拔下 USB 并选择使用 WiFi 或以太网(或其他具有 IP 地址的网络方式)。要通过 TCP 添加设备,请在主窗口中使用“+ 连接新设备”或“未找到设备,单击此处开始”,这将为您带来一个连接窗口。通过 TCP 连接有两种方式:

  1. 扫描二维码。在Connection Window选择TCP,会弹出二维码,打开设备“Total Control”应用,选择scan,扫描二维码,如果网络可达,会启动初始设置过程并弹出“连接”按钮。
  2. 输入 IP 地址。在“TCP”连接窗口右下角是“输入IP地址”,您可以点击手动输入设备的IP地址,如果您不知道IP地址,打开设备中的“Total Control”应用点击TCP标签。忽略密码并单击确定。设备会弹出TC连接确认信息,点击OK继续。您可以通过在“Total Control”应用程序中设置密码并在连接窗口中输入IP和密码来绕过确认。输入的连接信息将保存在顶部的下拉菜单中。

设备设置还支持 USB 和 TCP 的“自动连接”,它会自动连接并打开设备窗口。它不提供以太网自动连接,WiFi 自动连接允许设备检测接入点的存在,自动发现并连接到 TC。

只要设备被授予adb权限,TCP连接就可以非常强大,它允许TC连接/控制任何可达网络中的设备,通过VPN,它可以连接多个远程位置的设备。Total Control 8 添加了 TCP 分组,以便通过 TCP 连接多个设备。

屏幕投影

如果控制不是你关心的,你只是想投屏,在连接窗口中选择“投影”,它会显示二维码,与TCP连接一样,使用设备中的“全控”应用程序扫描二维码,如果是可达,会显示“连接”按钮,点击显示。此模式不允许用户控制设备。

视窗

Total Control 有两种模式,Windows 桌面模式 (WDM) 和多设备控制中心 (MDCC),MDCC 是完全不同的野兽,我们将在后面专门介绍。为简单起见,我们将在大部分章节中描述 WDM。

不同类型的窗口有几种类型和功能:

  • 主窗口:启动 Total Control 时,此窗口将始终存在。它由几个功能组成:
    • 连接设备的设备名称,Lite会显示设备屏幕内容的缩略图,会定期更新缩略图。双击设备名称会将设备置于最前面。[专业版] 适用于 2 台或更多设备:它具有 3 种同步模式:鼠标、键盘和功能键,同步模式允许所有设备跟随与主设备相同的动作。您还可以更改对 TC 有意义的设备名称。
    • 如果配置了通知,它将在设备窗口底部显示通知摘要。 单击它可以显示更多详细信息,该图标将反映未读通知的数量。
    • “全部应用”很少使用,目前只支持截图到所有设备。
    • “脚本”,脚本是 Total Control 的重要组成部分,这会弹出一个具有许多功能的脚本窗口。请参阅后面的部分。
    • "MDCC" – 进入 MDCC 模式,对于 4 个或更少的设备,建议使用 WDM。MDCC 对 10 个或更多设备有效。
  • 设备窗口:这是进行镜像和控制的地方。您可以打开尽可能多的 CPU 和网络可以支持的设备,Total Control 支持(超过 4 个设备需要额外付费)多达 100 个设备,WDM 适合少数设备。对于许多设备窗口,总是有一个“主”设备窗口,在另一个设备窗口上单击鼠标光标可以切换“主”设备窗口。var device = Device.getMain()。
  • 连接窗口,点击主窗口“+”会弹出连接窗口,连接USB设备时也会自动弹出连接窗口。点击“连接新设备”,您可以通过 USB、TCP 和二维码连接到投影设备屏幕。

设备窗口

设备窗口将自动打开(自动连接)或单击连接窗口中的“连接”按钮。设备窗口由几个组件组成:

  • 设备画面内容
  • 具有硬件键的设备的可选硬件键(最近的应用程序、主页、返回和菜单)。
  • 顶行有一个菜单按钮菜单按钮和4个快捷键(可以在系统设置)。
  • 标题栏有 4 个键:
    • 设置:输入设备设置。
    • “i”信息:显示有关设备的信息,其名称、分辨率等。
    • 总在最前面。
    • 帮助。
  • 可选地,它将显示鼠标相对于设备的坐标(系统设置⇒显示坐标),定位某些控件的坐标很有用。
  • 如果设备耳机插孔插入了 THA(我们的硬件设备),它将在此处显示信息。THA 将设备音频回送至麦克风,TC 将从麦克风捕获声音并发送到 PC。目前,THA 未在国际上销售。
  • 从设置或返回键返回键(将被淘汰)。
  • 用于调试目的的带有 4 个小矩形的图标。
  • 可以通过拖动设备窗口的边框来调整设备窗口的大小,位置和大小会被保存,如果以后打开同一个设备,窗口会恢复到原来的位置和大小。

设备菜单

在设备窗口中单击 3 水平将弹出一个功能菜单:

  • 截屏到 PC/设备并录制视频。请参阅屏幕截图和视频录制
  • [专业版] 捕获 PC。请参阅复制粘贴和文件传输
  • 放大/缩小并向左/向右旋转。 如果横向/纵向自动检测不起作用,请旋转。
  • 全屏。将设备填满整个屏幕,因为 Escape 键用作“返回”键,要恢复屏幕,请单击菜单中的最后一个按钮。如果您没有看到菜单,请单击屏幕左边缘的箭头,它将显示菜单。
  • 最大高度。牺牲菜单标题,尽量垂直延伸。
  • 备份还原
  • 文件管理器。在设备上提供一个基本的文件管理器,用于在设备和 PC 之间拖入/拖出文件。
  • 暂停画面。将暂时停止屏幕传输,单击菜单“>”继续(跳转到最近的屏幕)。
  • 更改键盘。 更改设备虚拟键盘。
  • [专业] 语音控制。打开/关闭语音控制
  • 设备设置。调出设备设置
  • 亚军。 运行 AAIS 和 JavaScript 脚本。

设备设置

设备设置用于微调设备的行为方式,它有很多选项,其中大多数使用默认值运行良好:

  • 有关设备设置中的各种控件,请参阅屏幕设备设置。
  • 控制设备屏幕亮度([Pro]可以适用于所有连接的设备),这是暂时的,当设备断开连接时,它会恢复到之前的设置。使设备屏幕变暗以节省电量和保护隐私很有用。
  • 音量控制,最多可控制6种音量([Pro]适用于所有连接的设备)。这种变化是永久性的。
  • 快捷键。配置 10 个功能键来启动应用程序或运行脚本。所以你可以为Facebook配置F1,任何时候你都可以点击F1来调出Facebook。
  • 自动连接。如果勾选会自动连接并显示设备窗口,如果要使用 TCP 自动连接,则必须已经与 TCP 连接。
  • [Adv] 硬件密钥。如果自动检测有问题检测到硬件键的存在,您可以在此设置中覆盖它。
  • [Adv] Hotspot 如果在应用程序中启用和配置,它在顶部菜单上有一个红点,拖动到可点击位置并与热键(Ctrl + Alt + <字母>)关联,它会记录位置,热键和应用程序,当应用程序启动时,点击热键会触发TC点击该位置。可以在一个应用程序中配置多个热点。
  • [Adv] 输入模式。我们支持成千上万的 Android 设备,如果设备对设备屏幕上的操作(鼠标或键盘)没有响应,请更改为 4 种输入模式之一。

屏幕设备设置

在保证屏幕传输的效率方面付出了很多努力,如何在不牺牲高 PC CPU (<10%) 的情况下保证 40-60 fps 的传输。在设备和 PC 上高效使用 GPU 至关重要,任何一侧没有 GPU 都会显着减慢镜像速度。我们还拥有自主开发的压缩 (SFC) 来处理没有 GPU 的设备。我们将在 PC 上执行图像压缩(H.264 或自制)、传输和解压缩和渲染,PC 必须处理多个设备。图像(质量 + 延迟)受许多因素的影响很大:每秒帧数、每帧数据大小(分辨率、质量)、USB 传输率、adb 传输率、设备和 PC 的 CPU/GPU。我们提供了许多参数进行调整。

解析度

Lite 版本提供 640p 分辨率,Pro 提供 4 种分辨率,我们将保持纵横比,调整大小在设备上完成。例如,4K 分辨率的设备对 PC 上的屏幕质量影响很小,但 1080p 会。1080p 将给设备和 PC 带来沉重负担(生成和移动更多数据)。

  • 480p
  • 640p
  • 720p
  • 1080p

设备加速

有3种加速方式:

  • HA1:这是尽可能快的传输,这是在设备上完成的。通常可以达到每秒 40-60 帧 (FPS) 的平均设备和 PC。
  • HA2:此速率限制为不超过 30 FPS,需要更多设备 CPU/GPU 来手动调整大小和压缩屏幕图像。此模式对录制很有用(打开录制时将切换到 HA2),60 FPS 录制将创建巨大的 MP4 文件大小。
  • 兼容模式:不提供 GPU 或 H.264 压缩的设备 SoC 需要此模式。我们开发了我们的专利压缩技术,称为 SFC,该压缩在慢速设备 CPU 中是可行的。几乎所有最近的 SoC 都提供 GPU(和 H.264),这种模式对于没有 GPU 的无头设备很有用。SFC 利用设备和 PC 上的 CPU,这种模式平均可以达到 10-15 fps。

画面质量

我们通过调整 H.264 比特率提供 3 种图像质量:低、中和高,质量不会影响静态图像(如果图像不刷新,设备将传输高质量的静态图像),在动态图像中更明显。

[Adv] 设备编码设置

调整 H.264 配置文件以获得更高的图像质量,Android 需要基线配置文件,并非所有设备都支持其他配置文件。

[进阶] PC 加速

TC 已调整为使用 Intel i 系列 CPU/GPU,如果您有外部显卡,您可以调整 DirectX 或 OpenGL 是否提供更好的性能。通常 DirectX 就足够了。

[进阶] 硬件加速

对于HA1和HA2,它会让GPU一步完成解压和渲染。如果未选中此模式,它将执行解压缩 (GPU) 并渲染为 2 个不同的步骤(移动大量数据)。

[进阶] 原生与投影

在 Android 12 之前,我们可以使用自己的代码进行 H.264 或 SFC 压缩,我们称之为“原生”,随着 Android 中引入“屏幕投影”功能,我们在 Total Control 中添加了“投影”。 Android 投影的速度与我们的本机模式相似(如果不是更快的话),我们很难为每个新版本的 Android 保持两种模式。 从 Android 12 开始,我们将不再提供“原生”模式或 SFC。

系统设置

系统设置是适用于所有设备的设置。它可以通过主窗口设置或设备设置⇒系统设置访问。它由左侧的主题和右侧的详细设置组成,您可以右键单击左侧的标题滚动。它包含以下设置:

西格玛键盘

  • 启用 Sigma 键盘:选中此设置将始终自动启用 Sigma 键盘,断开连接将恢复为原始键盘设置。
  • 直接粘贴到设备:这适用于文本,您可以从其他 Windows 应用程序复制并按 Ctrl-v 将文本直接粘贴到设备中。
  • 自动发送回车键:对于社交媒体应用程序,大多数设置都有回车键发送。 选中此设置将保存一个 Enter。 当您在文本框中输入文本并按 Enter 时,使用此选项,这将发送文本并自动发送 Enter。 如果键盘处于搜索模式,Enter 也可以发送搜索键。
  • 自动文本输入:见“文本输入”,可以配置短文本和长文本的映射。

其他选项

屏幕截图、视频录制 - 请参阅屏幕截图和视频录制

Capture PC – 请参阅复制粘贴和文件传输

复制 - 请参阅复制粘贴和文件传输

共享图像时保存/剪贴板。 请参阅复制粘贴和文件传输

Boss Key - 可以定义一个功能键来关闭 Windows 系统托盘中的所有设备窗口。

屏幕控制模式 - 查看动作,单击并滑动

adb/adb2 - adb2 比 adb 更新更快,如果在 adb2 上遇到问题,可以切换到 adb。

设备自动睡眠 - 默认情况下,TC 将保持设备屏幕始终打开,选中此选项以使用设备显示超时设置。

备份 - 联系人、消息和通话记录的备份和恢复路径。

每秒帧数 - 显示每秒帧数。

Show Coordinates – 显示鼠标光标相对于设备屏幕的绝对和相对坐标,对需要 x 和 y 坐标的 API 很有用。

设备显示模式 – MDCC 或 WDM。MDCC 将在不同的部分。

快捷方式——这允许用户定义多达 4 个快捷方式,这些快捷方式将显示在设备窗口的顶部,以便于访问。其中大部分是不言自明的,“Sigma Input”将允许用户选择输入法。

通知管理 - 可以定义要存储的通知数量以及收到通知时的操作。

自动启动 - 这是一个小型 PC 软件,允许用户启动/退出/重新启动 Total Control,或者如果具有自动连接的设备插入 USB 端口,它将自动启动。

REST API – 定义 REST API 的用户名和密码,默认情况下,出于安全考虑,密码是 TC ID 的最后 8 个字符。“持续时间设置”是发送另一个“身份验证”所需的时间。如果 PC 上有端口号冲突,可以更改端口号。剩下的就是记帐信息和连接列表。

语音 - 有关详细信息,请参阅语音控制

动作、点击和滑动

移动可能是您将测试的第一件事,我们通过滑动或滚动来模拟移动,键盘 4 箭头键,PgUp、PgDn、Home、End(菜单)将移动屏幕,带有 4 个箭头键的 Shift 是在屏幕中间,对下一页非常有用,例如在应用程序柜上滑动图片或下一页。Shift-PgUp 和 Shift-PgDn 将移动到文档的前面和底部(尽可能快地滑动)。

三个键很重要:“Esc”、“Tab”和“Enter”。“Esc”键是Android的返回键“<”。某些应用程序提供 Enter 键作为发送,Enter 键将很方便,而不是单击按钮发送。由于没有光标,您可以使用“Tab”和“Enter”来浏览一些选项。通过按额外的 Enter 键可以使用 Enter 键进行搜索。

或者,可以使用鼠标来控制动作,鼠标滚轮充当“向上”和“向下”箭头,鼠标左键用于单击或滑动。鼠标右键有两个特点:

  • 点击返回。
  • 拖动以模拟捏拉缩放,用于放大/缩小图片。按下右键,远离屏幕中心放大,向中心移动缩小。完成后,松开鼠标右键。当鼠标在位置 (x, y) 按下时,它将模拟在点 (width – x, height – y) 的另一次按下。

在系统选项“屏幕控制模式”中,您可以选择尽可能使用 Android 滚动功能的“滚动”(除 Shift-up/down/left/right 之外的所有移动键)。

文本输入

Total Control 处理输入的方式是在设备上安装一个名为“Sigma 键盘”的键盘,“Sigma 键盘”是一个在后台与 PC 中的 Total Control 通信的隐形键盘。建议始终使用 Sigma 键盘,因为它允许用户使用 PC 的键盘输入文本。系统设置有一个选项总是使用 Sigma 键盘。当需要输入文本时,设备窗口顶部会出现一个文本框,用户可以通过自己喜欢的语言和 Windows 提供的输入系统在文本框中输入文本。有3个输入选项供用户选择:

  • “a”:一次输入一个字符,不需要Sigma键盘,输入的每个字符(需要英文键盘)都会发送到设备。例如,如果设备已更改为中文输入法,您可以使用字母和数字键组成汉字。此模式不支持复制粘贴。
  • “ab”(版本 8 更新 20):这允许用户输入任何语言,短暂的暂停(默认值:200 毫秒)将使输入的文本发送到设备。支持复制粘贴,不支持自动文本。
  • “abc”:线路模式允许您输入长文本并输入键发送到设备。这是允许自动文本和复制粘贴的默认模式。

还有另一个选项“a”,很少使用,因为一次输入是字母,通常在终端软件中很有用。文本框提供了许多功能:

  • 如果需要输入密码,输入的密码会以点的密码掩码显示。
  • 支持输入跨多行的长文本字符串。
  • 基于文本的剪切粘贴到此文本框可以跨越多行而没有任何问题。
  • 支持快捷方式,您可以使用“Sigma 键盘”下的系统设置、“自动文本输入”和配置按钮来配置自动文本。例如:"cyl" = "I will call you later",如果你输入"cyl",文本会替换为"I will call you later"。
  • Enter 会根据设备文本属性搜索“Search”或“Enter”,很多Android App 提供“Enter to send”,TC 支持,输入文本,回车,再按回车发送。同样,对于搜索:输入文本,按两次回车键。

当文本框出现时,上/下/左/右或PgUp/PgDn等导航键适用于文本框,您需要使用Escape键关闭文本框。

当 USB 断开连接时,设备 TC 会将其键盘恢复为之前的设置。

如果要使用特定键盘,请在设备窗口中选择菜单“更改键盘”选项来更改键盘。

复制粘贴和文件传输

在 Sigma Keyboard 的支持下,您可以在 PC 和设备之间进行剪切粘贴,TC 还支持传输文件:

  • 复制粘贴到文本框。其他应用程序中的 Ctrl-C 和文本框中的 Ctrl-v。
  • 直接复制粘贴到设备窗口(如果是输入模式),需要在系统设置中启用“直接粘贴到设备”选项,以免误粘贴。
  • 复制设备中的文本,设备窗口会显示一个图标,点击图标将文本复制到 Windows 剪贴板。如果您不想每次都按图标,请在系统设置中启用“剪贴板自动同步到 PC”。
  • 您可以通过将文件从 Window explorer 拖到设备窗口中来将一个或多个文件从 Windows 复制到设备,这些文件将存储在“/sdcard/Total Control/files”中。如果您将 APK 文件拖到设备窗口,它将自动安装。如果您有外部 SD 卡,它会提示您安装位置。
  • 打开文件管理器进入设备中的特定路径,您可以拖入/拖出文件以在设备和PC之间传输文件。
  • 在设备窗口菜单中选择“捕获PC”,会提示用户裁剪PC屏幕的一部分,单击“确定”将文件存储在设备中,文件将存储在“/sdcard/Total Control/screenshots”中,或者,系统设置,在“捕获PC”下,在文本框中按组合键(“Ctrl/Alt/Shift+字母”)设置捕获热键。有关详细信息,请参阅屏幕截图和视频录制
  • 将文件从设备传输到 PC 的另一种方法是使用 Android 的“共享”功能。 启用系统设置“剪贴板自动同步到 PC”时,选择保存到剪贴板或文件,在图库中,单击共享,选择“完全控制”,发送图像时,图像将在剪贴板中可用或存储在 文件或两者。

截图和录像

有关更多选项,请参阅系统设置屏幕截图和视频录制

有几种方法可以做截图:

  • 截图到电脑
  • 设备截图
  • 设备内存的屏幕截图(仅在 JS/REST API 中可用)。

提供三种格式:BMP、PNG 和 JPG。截图是在设备(不是现有设备屏幕)上进行的,它将以原始分辨率进行,如果您有高分辨率(例如4K)设备屏幕,请不要使用BMP,传输大的BMP数据需要很长时间到PC(或需要很长时间才能存储)。使用无损 PNG 或 JPG(使用滑块设置质量)以节省空间。

截图可以存储在文件或剪贴板中,文件存储在文件路径中,对于剪贴板,您可以粘贴到“Paint”等图形程序上。

对于具有高分辨率屏幕(2K 或以上)的 PC,捕获原始分辨率会导致将大文件传输到设备。“调整为 1080p”默认选项会将屏幕视为 1080p 并相应地调整大小。

对于视频录制,当打开视频录制时,会出现一个计时器,点击红色矩形停止录制。几点注意事项:

  • 录制时,加速模式会自动切换到HA2,保证低帧率(最高30帧),而不是HA1的40-60帧,这样会大大减小MP4的大小。录制停止后,它将恢复到以前的模式。
  • 视频会被分割成不同的片段,片段是按时长分割的,当达到时长时,它会创建一个新的视频文件,这将限制视频文件的大小。带段的视频文件名为“<设备名称>-<日期>-<时间>-<段号>.mp4”,段号从1开始。
  • 设备窗口菜单项“录制视频”图标下方,有一个小箭头,点击后会显示音频源列表,麦克风,线路输入和THA,选择源,将混合到视频中.

语音控制

TC 利用 Windows 7 和 10 语音功能,允许用户使用语音打开应用程序或运行功能(请参阅Userlib.js)。默认情况下,设备中的所有应用程序都将被注册,因此您可以使用“打开"打开应用程序,例如“打开日历”打开日历。如果应用程序不是英文单词或难于发音(尤其是游戏名称),您可以将短语与应用程序关联。

您还可以将短语与 Userlib.js 中的函数名称相关联。当听到一个单词时,它会执行一个以设备 ID 作为唯一参数的函数。例如,配置“立即离开”以运行 leaveNow。您可以在 Userlib.js 中创建一个函数。函数 leaveNow(device) {…}

触发短语是“OK TC”,弹出窗口会打开并准备好命令,如果第一个单词是“多个”,用户可以提供命令列表,直到听到“停止”或 60 秒没有可用命令。这些动作将在主设备中执行。

出于安全考虑,需要“开启”语音控制功能才能监听触发短语,开启一台设备将开启所有设备。如果您在系统设置中,您可以选中“始终启用”以自动打开。

特征 嗓音
触发短语 好的 TC
多语音cmd
停止多个 停止
应用 打开“应用程序名称”
打开<短语>;短语=“应用程序名称”
功能 运行<短语>; 短语=“函数名称”
特征 钥匙 嗓音 钥匙 嗓音
移动 向上箭头 向上 向上翻页 向上翻页
向下箭头 向下 向下翻页 向下翻页
左箭头 剩下 shift-PgUp 去顶部
右箭头 移位-PgDn 走下坡路
滑动 左移 向左滑动 上移 向上滑动
右移 向右滑动 降档 刷下
特殊功能 逃脱 背部
结尾 菜单

备份还原

Total Control 为联系人、短信和通话记录提供基于设备的备份和恢复。可以在系统设置⇒备份中更改位于 PC 中的备份。备份以 JSON 格式存储,您可以使用 JSON 编辑器进行更改,擦除设备中的所有数据并恢复到设备。还有用于操作联系人和消息的 JavaScript API。使用这些权限很难登录 Google Play 商店,我们已经取消了此功能,如果您购买了专业版,如果您需要此功能,请联系我们。

付费功能

Total Control 提供精简版,可免费用于非商业用途。所有 Total Control 付费功能都是基于 PC 的年度订阅计划。要购买,点击购物车图标,选择您要购买的功能,选择结帐,支付方式,支付完成后,在PC上重启Total Control,授权将升级为新购买的功能。

Total Control 提供 2 种付款方式:

  • 微信
  • 支付宝

MDC-x

由于 Professional 包含其他付费功能的基本功能,因此用户必须在购买其他功能之前购买 Professional 订阅。如果您计划在以后购买额外的付费功能,则 Professional 1 年订阅到期日期很重要。例如,您在 6 个月前购买了专业订阅并决定购买 MDC-20,您只需支付 MDC-20 价格的一半,MDC-20 的到期日期与专业相同。此外,如果您计划在 3 个月后(专业 9 个月后)购买 MDC-30,您只需支付差价(TC 扣除未使用时间):

(价格(新)- 价格(旧))/365 * 距离专业版到期的剩余天数

在这种情况下:

(价格(MDC-30) – 价格(MDC-20))/365 * 90 天 (3 个月)

所有 MDC-x 都可以通过 Stripe 支付方式升级到更多数量的设备。

TC-DC

TC-DC(设备控制)是一个独立的安卓应用程序(称为查看器),允许 MDCC 用户选择一个设备来控制主设备,一些应用程序更容易通过设备导航而不是使用鼠标和键盘来控制它们。查看器应用程序可以是连接到 MDCC 的设备之一,也可以在运行 TC 的 PC 可访问的任何设备上运行(甚至在数千英里外的 VPN 上)。如果您正在运行 MDCC,如果您在 MDCC,您可以选择任何设备单击 DC 图标,如果您使用 TCP 连接到 MDCC,请在此处下载应用程序。


购买完成后会发送订阅确认邮件并附上“激活码”,如果您打算将Total Control移至新PC或需要重新安装操作系统,请先在新PC中安装精简版PC/OS,使用激活码激活付费功能,输入有效激活码后会生成新的激活码,请妥善保管。您每年只能进行 10 次转账。

我们提供2种付款方式:

项目代码 描述 # 设备
TC-精简版 免费版,提供许多基本功能 2
TC-Pro 专业,提供许多附加功能 4
TC-MDC-10 Total Control 支持 10 台设备 10
TC-MDC-20 Total Control 支持 20 台设备 20
TC-MDC-30 Total Control 支持 30 台设备 30
TC-MDC-50 Total Control 支持 50 台设备 50
TC-MDC-70 Total Control 支持 70 台设备 70
TC-MDC-100 Total Control 支持 100 台设备 100
TC-DC 设备控制 PC-TC 控制其他设备 不适用

捷径

Total control实现了多种快捷方式来提升用户体验,有2种快捷方式,一种适用于设备(​​在设备设置中),另一种适用于整个系统(在系统设置中):

  • [设备] 快捷键:运行脚本或启动应用程序的功能键。
  • [系统]输入文本框自动文本以将短格式替换为长格式。
  • [系统] 获取PC和boss键。
  • [系统] 键盘类 API。

脚本

Total Control 的最大优势之一是脚本功能。Total Control 提供丰富的 API 来控制一个或多个 Android 设备。它提供了 2 套 API:JavaScript 和 REST API。JavaScript 将在本地运行脚本,REST API 提供语言和主机的灵活性。您还可以使用 REST API 来控制多台运行“Total Control”应用程序的 PC。

JavaScript API

语言

Total Control 为 JavaScript 提供以下框架(ECMAScript 5 与选定的 ES6 功能)

  • Mozilla 的 Rhino 1.7.7 with Total Control 7(或更低版本)、Rhino 1.7.12 with Total Control 8 和 Rhino 1.7.14 with Total Control 9(更新 20)。 有关详细信息,请参阅 https://github.com/mozilla/rhino
  • RingoJS 2.0。

如果 Rhino + RingoJS 没有提供足够的功能,Rhino 的好处是能够直接调用 Java API(Total Control 8 使用 OpenJDK 15)。

Total Control 提供了许多类,几个例子:

  • 设备
  • 设备阵列
  • UiElement(总控8)
  • UiElementArray(总控8)
  • 通知
  • 键盘
  • Excel

Device 和 DeviceArray 类

当设备连接时(自动连接或按下“连接”按钮),从“设备”类创建一个设备对象,使用静态方法“searchObject”定位设备对象。对于多个设备对象,它提供“DeviceArray”类(Array 的子类)。DeviceArray 对象中的设备将同时执行相同的任务。

设备类提供了近 100 种方法和属性来操作设备。DeviceArray 类提供了大约 20 多种常用方法。有关所有方法,请参阅 {{JavaScript API 文档}}。您可以轻松扩展 Device 和 DeviceArray (请参阅扩展 Device 和 DeviceArray)。

使用“Device.searchObject()”定位创建的设备对象,设备对象格式为“device@<10 digits>”。

//Returnonedeviceobject
varmySamsung=Device.searchObject('Samsung-S9');
//Returnalldeviceobjects, DeviceArray
varallDevices=Device.searchObject(tcConst.DevAll);
//Returndeviceobjectsbelongtosamegroup, DeviceArray
varallGroupX=Device.searchObject(tcConst.DevGroup,'firstrow');
varallGroupY=Device.searchObject(tcConst.DevGroup,'secondrow');
//Combine2groupstoformalargergroup, DeviceArray
vargroupXY=allGroupX.concat(allGroupY);

由于 DeviceArray() 是 Array() 的子类,它继承了 Array 类的大部分方法,因为所有 TC 特定的方法都绑定到 DeviceArray,如果你有一个数组,请使用 "var ary = new DeviceArray().concat (ary)" 转换为 DeviceArray。

//Thiswillfailsincethereisno"click"methodinArray
vardevice=Device.getMain();
varary=[device];
ary.click(100,100);

//Thiswillwork
vardevice=Device.getMain();
varary=newDeviceArray(device);
ary.click(100,100);    // or ary.clickSync("OK");

几个例子:

//clicklocation100,200ondevice name "Samsung-S10".
vardevice=Device.searchObject('Samsung-S10');
if(device){
    device.click(100,200); 	// or device.clickSync("Start");
}
//clickinthemiddleofthescreenonallconnecteddevices.
vardevices=Device.searchObject(tcConst.DevAll);
if(devices){
	devices.click(0.5,0.5); 	// or device.clickSync("John");
}

目录和 Userlib.js

默认情况下,脚本目录位于\Users\<用户名>\Documents\Scripts 目录,您可以通过单击主窗口中的“脚本”来更改它,选择“脚本列表”,最上面一行可以更改 目录。

在其中,您可以创建一个名为“Userlib.js”的文件,该文件将始终在脚本执行之前加载,您可以包含常用函数、向现有类添加原型或引入第 3 方软件。

要调试“Userlib.js”,请使用“终端”,要重新加载“Userlib.js”,请单击终端窗口右下方的重新加载图标。

绝对与相对坐标

对于x、y坐标,TC提供“绝对”和“相对”坐标(系统设置显示坐标会同时显示两个坐标),绝对坐标从(0, 0)到(width – 1, height – 1),相对坐标为通常是从 (0, 0) 到 (0.9999, 0.9999) 的 4 个小数点。相对坐标乘以设备宽度和高度将得到绝对坐标。坐标并不理想,Professional 支持使用 UI 元素中的文本在运行时检索坐标的AAI 。

扩展设备和设备阵列

JavaScript 的额外好处是可扩展性,您可以通过向类添加原型来扩展方法。假设您要为单个和多个设备创建一个方法“longPress”,一种编写方法是:

Device.prototype.longPress=function(x,y){
	varretval=this.click(x,y,tcConst.STATE_DOWN);
	if(retval!=0){
		returnretval;
	}
	delay(500);
	returnthis.click(x,y,tcConst.STATE_UP);
}

DeviceArray.prototype.longPress=function(x,y){
	for(leti=0;i<this.length;++i){
		retval=this[i].longPress(x,y);
		if(retval!=0){
			returnretval;
		}
	}
	return 0;
}

此实现对于 DeviceArray 中的大量设备效率不高,如果阵列中有 100 个设备,该方法可能需要长达 50 秒。

最好的方法是先向所有设备发送 STATE_DOWN,然后等到剩余的 500 毫秒用完。幸运的是,Device 和 DeviceArray(多个设备)引入了“sendAll”,它会执行指定的方法并等到指定的时间到期。这样,执行时间几乎是 500 毫秒。由于“sendAll”在 Device 和 DeviceArray 中可用,实现 Device 和 DeviceArray 的代码完全相同。

Device.prototype.longPress=function(x,y){
	varretval=this.sendAll(Device.prototype.click,
	     [x,y,tcConst.STATE_DOWN],500);
	if(retval!=0){
		returnretval;
	}
	returnthis.sendAll(Device.prototype.click,[x,y,tcConst.STATE_UP]);
}

DeviceArray.prototype.longPress=Device.prototype.longPress;
 

sendAll 仅适用于成功返回 0 的方法。

脚本工具

Total Control 中有很多工具可用,点击“脚本”会打开一个新窗口:

终端:打开 Rhino + RingoJS 命令提示符,您可以将其用于测试或开发目的。单击右下角的按钮以重新加载解释器和 Userlib.js。可以使用 load("filename.js") 来运行脚本。

脚本列表⇒路径:脚本默认路径,点击图标可更改路径到其他目录。

脚本列表⇒ JS 源文件:用于快速执行一个JavaScript 文件,它提供了一个简单的编辑器来快速更改或单击箭头键来执行脚本。

脚本列表⇒记录脚本:将设备上的动作记录到Excel文件中,Excel文件也可用于生成JS脚本或JSON文件(可能对REST API有用)。没有 JavaScript 经验的用户可以使用此工具生成简单的脚本。

脚本列表⇒图像助手。从主设备屏幕内容生成 BMP 文件,seekImage() 需要图像,它扩展 BMP 文件以提供附加信息,例如应用程序名称、活动、宽度和高度信息。seekImage() 将利用这些信息而不提供大量参数。

脚本列表⇒颜色助手。从主设备(如图像助手)加载屏幕内容,这是一个放大的颜色选择器,用于选择颜色的 RGB 值并生成具有复杂参数的 seekColor()。可以支持单色和多色。

脚本列表⇒用户界面资源管理器。 打开 UI Explorer 窗口,单击捕获以捕获现有的主手机窗口并允许用户体验查询语言以选择 UI 元素。 Helper 窗口将以查询语言为每个键提供帮助说明。

执行(将重命名为任务)。 创建一个任务以在各种条件下运行脚本,例如日期和时间、迭代次数、定期间隔或设备。 任务执行的输出和结果将被保存以供审查。 也可以通过 JS API 创建或更改任务。 Runner 执行将在此处显示为任务。

检查:检查与脚本和引擎相关的各种内部变量。

自动化和可访问性集成 (AAI)(Total Control 8+)

AAI 将屏幕上的 UI 元素识别为对象,传统的 (x, y) 坐标方式将屏幕视为一个巨大的对象,因此需要寻找图像/颜色和 OCR 来识别屏幕上的对象。

可访问性是一种将屏幕上的 UI 元素表示为底层节点的功能,一个节点包括许多属性,例如文本/描述、维度、布尔属性(例如可点击、可编辑或可滚动)、底层类名等。可以访问文本/描述 很容易(不需要 OCR),尺寸(和可点击)确保即使节点移动到另一个位置也可以在特定位置点击按钮。

一个节点可以表示一个 UI 元素(例如按钮)或一组 UI 元素或某些元素的布局。节点(元素、组或布局)可以通过节点 ID(以十六进制字符串表示)来标识。我们集成了 Accessibility、TC 脚本框架和 UI Automator 库来实现以下目标:

  • 独立于坐标使脚本更便于携带,具有不同的分辨率、多种尺寸和品牌。
  • 同步 API 会等到屏幕重绘,使脚本更简单,不需要猜测休眠时间。
  • 可以轻松地从应用程序中检索字符串,而不是使用容易出错的 OCR。

AAI最简单的情况:

  • 如果找到,请在屏幕上单击“确定”,对于特定分辨率,远优于 click(100, 100):devices.clickSync("OK")
  • 在文本输入中输入文本,AAI 可以找到当前屏幕中的所有文本输入行。
    devices.inputTextSync([position], "text")    // Enter text, the position is used for multiple inputs
  • 运行或重启应用,不查询,屏幕刷新返回;使用查询,刷新屏幕后将匹配查询。
    devices.runAppSync(<package name>, [query]) 
    devices.restartAppSync(<package name>, [query])

整个屏幕是由很多节点组成的,一个节点可以是一个最小的UI元素,也可以是很多节点的容器,有些节点是不可见的。整个屏幕是一个从单个根节点开始的树形结构。根据 App 的复杂程度,一个屏幕可以包含 50-300 个节点。

由于用户只对一小部分节点感兴趣,因此挑战在于找到用户想要的正确节点并提取信息或对其执行操作。

挑战是如何找到节点? 我们发明了一种查找节点的查询语言,在每台设备上都安装了FindNode程序,会执行查询语言来获取符合条件的节点,目的是将大量的节点减少到一个或几个想要的节点 ,用户可以获取信息或对节点应用操作。

例如:Java 中的 UI Automator 在 UiDevice.findObject() 或 findObjects() 中提供了“UiSelector”和“BySelector”来定位节点,对于多种情况可能很复杂:

new UiSelector().className("android.widget.TextView").text("OK")

我们创建了一种简单的查询语言,它更短且可移植,因为查询将发送到许多设备,上面的代码可以用我们的查询语言重写为:

"C: android.widget.TextView&&T:OK"

AAI项目包括以下内容:

  1. 查询语言,简单的一行语法语言来搜索目标节点。AAI 的核心。
  2. FindNode 在每个设备上执行查询或操作。 所有查询和某些操作都在 FindNode 中完成,它包含几十个命令。有关详细信息,请参阅FindNode文档。
  3. 一对多同步的对象模式,将节点(或UI对象)发送到所有设备而不是协调,单击“确定”可以在不同分辨率的所有设备上运行,而不是单击(100,100)。
  4. UI Explorer 获取节点信息,可以直观地测试查询语言,学习探索工具。
  5. AAIS,一种在多个设备上执行自动化的简单语言。捕获和重放生成此语言,有关详细信息,请参阅AAIS文档。
  6. REST 和 JS API 包括对 FindNode 的可访问性。
  7. FindNode 之上的 UiElement 类可以轻松访问节点。

询问

每个查询都有一个或多个“<key>:<value>”对,多个键可以用“&&”作为分隔符。

每个节点都由节点 ID 标识。 一次查询可以分为 3 个阶段:

  1. 模板(“TP”)。 此类“生成”初始节点。 例如“TP:textInput”将返回可编辑文本字段的列表。 这个类是强制性的,如果没有指定,将使用默认模板。
  2. 基本查询 (BQ)。 每个节点包含关于自身、类、文本/描述、属性等的信息。BQ 将一次匹配一个节点,将拒绝不符合条件的节点,不会传递到下一阶段。 如果不指定BQ,则TP生成的节点将传入EQ。
  3. 扩展查询 (EQ)。 通常用于多个节点的一组密钥。 多个 EQ 从左到右执行,同一键可以指定多次。 EQ示例:“OX:1”找到当前节点右侧的元素/节点。

执行查询后,找到的一个/多个节点列在“ML”(匹配列表)中,可以对ML应用操作列表,操作可以是检索信息或对ML执行操作。

模板:

为 BQ 或 EQ 生成初始节点。

TP:all 所有节点

TP:more 除以“Layout”结尾的节点外的所有节点

TP:basic 所有叶节点(子节点数为零)

TP:reduced 优化“TP:more”返回对屏幕重要的节点

TP:anyText[,<min>[,<max>]] “文本”中包含一定长度内容的节点。

TP:anyDescription[,<min>[,<max>]] “描述”中包含一定长度内容的节点。

TP:textInput 从左上角到右下角排序的所有“可编辑”字段。

TP:findText,<text> 参数中包含文本的节点,可以包含“*”和“/…/”。

TP:line,top|bottom,<number> 返回可滚动节点之外的顶部/底部节点。

TP:scrollable,<position> 可滚动容器内的节点,多个可滚动节点的位置。

基本查询(BQ):

查询获得的节点级信息,TP中的每个节点都会在BQ中匹配(如果提供)进行处理。

  • P:<package name> -不应该使用,默认为running app
  • C:<类名> 类名(S)
  • R:<资源ID> 资源ID(S)
  • D:<text> 描述(S)
  • T:<text> 文本(S)
  • IT:<number> 文本输入类型(一)
  • CC:<number> 孩子数 (I)
  • ID:<ID> 十六进制的节点 ID (S)
  • BI:[x, y] 节点包含(x,y)
  • BI:[x1, y1, x2, y2] 矩形包围的节点,如果x或y为-1,则为 忽略
  • BP:<prop name> 布尔属性(S)。
    • checkable, checked, clickable, editable, enabled, focused, longClickable
    • 可滚动,对用户可见。
  • TD:<text> 匹配文字或描述(S)。

扩展查询(EQ):

这里的查询通常跨多个节点。

扩展查询的顺序很重要,所有扩展查询都是从左到右执行的。 允许使用相同键的命令。

  • IX:<number> 根据位置从匹配节点列表中获取一个节点
  • OX:<number> 水平偏移相邻节点(正-右,负-左)
    /li>
  • OY:<number> 到相邻节点的垂直偏移(正-下,负-上)
    /li>
  • ON:<type> 从匹配节点列表中选择一个节点的不同方法
    • first, last, min
  • ST:<sort type> 根据节点在屏幕上的位置返回排序的节点
    • x, y, yx (or all)
  • TX 返回与参考节点水平相交的节点。
  • TY 返回与参考节点垂直相交的节点。
  • VG:[level number] 从 ML 中的第一个节点返回视图组中的节点组。
  • RN 从匹配节点列表中返回优化的节点。
  • BQ:<query> 执行基本查询。
  • X:<BQ中的key> 以“X”为前缀的基本查询键

对于BQ,查询语法可以包含“!” 对于不是,“>”,“<” 对于大于或小于,“*”表示通配符匹配,“/<regexp>/”表示正则表达式。 它可以匹配包名、类名、资源ID、文本、描述、子数量和输入类型。

FindNode 安装在每个设备中(Total Control App 的一部分),它是唯一识别查询语法的程序,它解析查询、定位节点并对找到的节点执行操作。FindNode 卸载了 JavaScript 的复杂性和 Total Control 的 CPU 使用率,所有搜索都在设备中进行。

device.sendAAi() 和 devices.sendAai() 是通过一个或一系列设备与 FindNode 进行通信的直接方式。JS 对象在发送到设备前会被翻译成 JSON,返回值为 JS 对象格式。如果遇到错误,则返回 null,lastError() 包含错误消息。

一个简单的查询示例,获取模型名称的文本,使用 1 的 X 偏移量(右侧):

>> device.sendAai({query:"T:Model name&&OX:1", postAction:"getText"})
{retval: 'Galaxy S10+'}

FindNode 甚至可以检测屏幕顶部/底部的固定图标:

>> device.sendAai({query:"TP:line,bottom,-1", action:"getText"})
{retval: ['Chats','Calls','Contacts','Notifications']}

下面 3 个命令,做同样的事情,点击“Calls”文本:

>> device.sendAai({query:"TP:line,bottom,-1&&T:Calls", action:"click"})
{retval: true}
>> device.sendAai({query:"TP:line,bottom,-1&&IX:1", action:"click"})
{retval: true}
>> device.sendAai({query:"TP:line,bottom,-1&&T:Chats&&OX:1", action:"click"})
{retval: true}

点击“联系人”图标:

>> device.sendAai({query:"TP:line,bottom,-1&&T:Contacts&&OY:-1", action:"click"})
{retval: true}
>> device.sendAai({query:"TP:line,bottom,-1&&IX:2", action:"click"})
{retval: true}
// Find multiple "Contacts" are found on the screen, IX:-1 is to select the 
// last node found 
>> device.sendAai({query:"T:Contacts&&IX:-1&&OY:-1", action:"click"})
{retval: true}

请阅读FindNode 用户指南以获得完整信息。

同步 API

在版本 8 之前,所有的动作或移动命令都是异步的,当一个命令(例如 device.click())返回时,表示该命令已经传递给我们的移动代理执行,当命令返回时,很可能是该命令未执行,因此需要睡眠以给时间完成操作并刷新屏幕:

	device.click(100, 100);
	睡眠(300);

这可能发生在所有使编码繁琐的动作和移动命令上。UI Automator 包括同步命令和等待窗口更新,当点击时,一个窗口已经更新,很可能命令完成。所有同步命令都以“Sync”为后缀。所有“同步”命令都使用 AAI 标签而不是坐标:

runAppSync()

restartAppSync()

clickSync()

inputTextSync()

UiElement 和 UiElementArray 对象方法

同步功能的一个缺点是命令完成所需的时间比异步命令长得多,这可能会减慢大量设备的脚本执行速度,我们已经解决了这个问题。

后续版本将为所有动作和运动功能提供同步功能。

AAI 脚本 (AAIS)

我们还开发了一个利用 AAI 功能进行自动化的迷你脚本,目前在 WDM 和 MDCC 中可用(文件扩展名为“.tst”),捕获和重放(带有对象选项)将在此脚本中生成。 它还提供与 JavaScript 的无缝集成(包含在“{}”中)。

例如

exec "teslaLib.js"
open "Tesla"
find "T:VIN:"
get "T:VIN:&&OX:1", "text"
{ saveVar("vin", getOutput().retval) }
get "T:/[0-9,]+ miles/", "text"
{ saveMileage(new Date(), loadVar("vin"), getOutput().retval) }
print "Done"

这个脚本可以同时在100台设备上运行,可以在任何屏幕尺寸上运行,“查找”会滚动直到找到查询。 任何线路上的任何故障都将停止脚本。 它为 AAIS 和 JavaScript API 提供命令。

另一个例子:

{
    var apps = ["Skype", "Whatsapp", "Telegram"];
    var arguments = getArg();
    var app = apps[0];
    if (arguments.length > 0) {
        var appNum;
        if(isNaN(appNum = parseInt(arguments[0]))) {
            throw "Need a number;"
        }
        if (appNum < 1 || appNum > apps.length) {
            throw "Option out of range";
        }
        app = apps[appNum-1];
    }
}
open "${app}"
print "${app} opened"

有关 AAIS 信息,请阅读AAIS 用户指南

多设备控制中心(MDCC)

在 Total Control 的主窗口点击“多控中心”图标,进入多控中心.

多控中心用户界面

更多内容将很快提供




设备控制设备组(DC)

该文章将很快提供。




支持

请发送电子邮件至 support@sigma-rt.com 以获得支持和反馈。