Bot.js Pro 9 $assistant 模块 — AssistService 控件树与窗口管理
本文基于 Bot.js Pro 9,系统讲解 $assistant 模块的使用方法,包括控件树访问、窗口管理、窗口过滤、当前包名与 Activity 获取等。文章提供完整 API 一览表、方法调用示例、截图操作及推荐实践方案,帮助开发者快速上手自动化操作与调试,提高脚本开发与维护效率。所有示例均保持官方风格,并附带官方文档链接,便于深入学习与参考。
参考官方文档: Bot.js Pro API 文档
本文基于 Bot.js Pro 9,详细讲解 $assistant 模块的使用方法,包括控件树访问、窗口管理、窗口过滤以及常用方法调用,帮助开发者快速上手自动化操作和调试。
🧩 模块简介
$assistant 模块用于访问 AssistService 控件树,管理系统窗口,类似 Android 无障碍节点树或控件树遍历。
- 模块名称:
$assistant— AssistService 控件树访问与窗口管理 - 官方参考文档:AssistService API
🧠 可用属性与方法一览
| API 名称 | 类型 | 返回值 | 说明 |
|---|---|---|---|
$assistant.service |
Getter | AssistService |
返回当前 AssistService 实例 |
$assistant.windows |
Getter | Array<Window> |
获取所有系统窗口对象数组 |
$assistant.root |
Getter | UiNode |
获取第一个窗口的根节点 |
$assistant.rootInActiveWindow |
Getter | UiNode |
获取当前活跃窗口的根节点 |
$assistant.windowRoots |
Getter | Array<UiNode> |
获取所有过滤后的窗口根节点 |
$assistant.setWindowFilter(filterFn) |
Function | void | 设置窗口过滤器,用于控制哪些窗口被分析 |
$assistant.currentPackage() |
Function | String |
获取当前前台应用包名 |
$assistant.currentActivity() |
Function | String |
获取当前前台 Activity 类名 |
🔹 方法详细说明
$assistant.service
返回当前连接的辅助服务(AssistService)。
var service = $assistant.service;
if (service != null) {
console.log("语音交互服务 已启动:", service);
} else {
console.log("语音交互服务 未连接");
}
参考:auto.service
$assistant.windows
返回系统当前存在的所有窗口(包括后台窗口)。
var windows = $assistant.windows;
console.log("窗口数量:", windows.length);
windows.forEach((w, i) => console.log("窗口[" + i + "] 标题:", w.getTitle()));
$assistant.root
返回第一个窗口的根节点。
var root = $assistant.root;
if (root) {
console.log("第一个窗口根节点:", root);
console.log("子节点数:", root.children().length);
} else {
console.log("未找到根节点");
}
$assistant.rootInActiveWindow
返回当前活跃窗口的根节点。
var activeRoot = $assistant.rootInActiveWindow;
if (activeRoot) {
console.log("当前活跃窗口根节点:", activeRoot);
} else {
console.log("无活跃窗口");
}
$assistant.windowRoots
返回所有被过滤器允许的窗口根节点。
var roots = $assistant.windowRoots;
console.log("过滤后根节点数量:", roots.length);
roots.forEach((r, i) => {
console.log("根节点[" + i + "] 子节点数:", r.children().length);
});
$assistant.setWindowFilter(filterFn)
设置窗口过滤器函数,用于筛选窗口。
$assistant.setWindowFilter(function (window) {
log("检测窗口: " + window.getTitle());
return true; // 全部允许
});
// 只允许特定 App 或标题
$assistant.setWindowFilter(function (window) {
return window.getTitle().includes("com.tencent.mm"); // 仅保留微信窗口
});
$assistant.currentPackage()
返回最近一次监测到的正在运行的应用包名。
var pkg = $assistant.currentPackage();
log("当前应用包名: " + pkg);
注意:语音助手服务未启动时会抛出异常,需要开启服务。
$assistant.currentActivity()
返回最近一次监测到的正在运行的 Activity 类名。
var act = $assistant.currentActivity();
log("当前 Activity: " + act);
注意:语音助手服务未启动时会抛出异常,需要开启无障碍功能。
💡 示例:完整流程调用
// 初始化过滤器
$assistant.setWindowFilter(function (window) {
log("检测窗口: " + window.getTitle());
return true;
});
// 检查 AssistService 是否运行
var service = $assistant.service;
console.log("AssistService:", service);
// 获取所有窗口
var windows = $assistant.windows;
console.log("所有窗口数量:", windows.length);
// 输出窗口信息
windows.forEach((w, index) => console.log("窗口[" + index + "]:", w.getTitle()));
// 根节点获取
var root = $assistant.root;
if (root != null) console.log("第一个窗口根节点子节点数:", root.children().length);
// 当前活跃窗口根节点
var activeRoot = $assistant.rootInActiveWindow;
if (activeRoot != null) console.log("活跃窗口根节点:", activeRoot);
// 所有被过滤的窗口根节点
var filteredRoots = $assistant.windowRoots;
console.log("被过滤的窗口根节点数量:", filteredRoots.length);
// 截图示例
console.log("截图返回 Image 对象: ", $assistant.captureScreen());
console.log("截图保存至路径: ", $assistant.captureScreen("/sdcard/01.png"));
⚙️ 控件节点的查找和点击实例
selector(1) 选择器参数1 代表使用的就$assistant服务的节点选择器,下方代码就是开发工具自动生成的,不需要手写。
var uiObject = selector(1).text("云控").desc("云控").className("android.widget.TextView").visibleToUser(true).scrollable(false).clickable(true).findOne(1000);
if (uiObject) {
$hid.click(uiObject.bounds().centerX(), uiObject.bounds().centerY());
sleep(1000);
} else {
toastLog("未找到符合条件的控件");
}

手机端 Bot.js Pro App也支持布局分析和代码自动生成

更多 API 细节请参考 Bot.js Pro 官方文档
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)