回答
在手机上抓取悬浮窗(浮窗)元素,主要分为两种情况:抓取系统或其他应用的悬浮窗,以及抓取你自己用 Hamibot 脚本创建的悬浮窗。
情况一:抓取系统或其他应用的悬浮窗
如果你想用 Hamibot 识别并操作屏幕上已经存在的其他应用或系统的悬浮窗(比如某个游戏的小窗口、音乐播放器的控制栏等),你需要使用 Hamibot 的控件查看器和基于无障碍服务的控件操作函数。
具体步骤和核心方法是:
- 开启无障碍服务:在 Hamibot 设置中为你的脚本启用无障碍服务权限,这是自动化操作的基础。
- 使用控件查看器分析:
- 打开 Hamibot App,进入你想要编写或运行的脚本界面。
- 点击右上角的“▶️”按钮启动控件查看器。
- 将蓝色的定位准心拖动到你想抓取的悬浮窗上,查看器会显示该悬浮窗的所有层级信息和控件属性(如
text,id,className,bounds等)。
- 在脚本中编写代码定位:
- 根据控件查看器分析出的属性,使用
id(),text(),className(),bounds()等选择器来定位目标控件。 - 常用的函数是
click(),longClick(),setText()等。
- 根据控件查看器分析出的属性,使用
代码示例(假设要点击一个悬浮窗上的按钮):
// 文档地址 https://docs.hamibot.com/
// 通过文本内容定位并点击
click('开始游戏');
// 或者通过组合选择器更精确地定位
id('button_start').click();
// 如果悬浮窗位置固定,也可以通过坐标点击
click(500, 300);
情况二:抓取你自己用 Hamibot 脚本创建的悬浮窗
如果你使用 Hamibot 的 floaty 模块创建了悬浮窗,那么抓取并操作其内部的元素非常简单,你不需要使用控件查看器或无障碍服务。
你创建悬浮窗后,会返回一个窗口对象(FloatyWindow 或 FloatyRawWindow)。你可以直接通过这个对象和你在布局中为控件设置的 id 来获取并操作它们。
核心方法:
使用 window.{id} 来获取悬浮窗界面上的元素。例如,你在布局中给一个文本控件设置了 id="text",那么用 window.text 就能获取到它。
代码示例:
// 文档地址 https://docs.hamibot.com/
// 1. 创建悬浮窗,并为text控件设置id
var w = floaty.window(
<frame gravity="center">
<text id="myText" text="初始文本" />
<button id="myButton" text="点击我" />
</frame>
);
// 2. 直接通过窗口对象w和id来操作控件
// 修改文本内容(必须在ui线程中执行)
ui.run(function() {
w.myText.setText('文本已被更改!');
});
// 为按钮设置点击监听(也必须在ui线程中执行)
ui.run(function() {
w.myButton.setOnClickListener(function() {
toast('按钮被点击了!');
w.myText.setText('点击后的新文本');
});
});
// 5秒后关闭悬浮窗
setTimeout(() => {
w.close();
}, 5000);
总结
| 抓取对象 | 使用方法 |
|---|---|
| 系统或其他应用的悬浮窗 | 使用 Hamibot 的控件查看器分析,配合 click(text), id().click() 等无障碍服务函数。 |
| Hamibot 自建的悬浮窗 | 使用 floaty.window() 返回的窗口对象,通过 window.你设置的id 来直接操作。 |
根据你的具体需求,选择对应的方法即可。
ℹ️ 本回答由 AI 生成,内容仅供参考