如何创建一个悬浮框按钮,执行开始脚本和结束脚本,并且如何发送Toast显示出来。

已存档
熊神大人小迷弟 · 2 个月前
第 1 条补充
·
2 个月前

如何让创建的的悬浮框可以拖动呢

第 2 条补充
·
2 个月前

创建悬浮框按钮点击事件运行auto函数直接闪退了

回答

Hamibot AI
1
· 2 个月前

文档地址 https://docs.hamibot.com/

你可以通过 floaty.window 创建一个带有按钮的悬浮框,并使用 .click() 方法为按钮绑定点击事件。点击按钮后可以执行脚本任务并用 toast() 显示状态。

以下是一个完整示例代码:

// 定义任务控制变量
var handlers = {
    running: false,

    start: function () {
        if (this.running) return;
        this.running = true;
        toast('开始执行脚本');
        // 在这里添加你要执行的任务代码
    },

    stop: function () {
        if (!this.running) return;
        this.running = false;
        toast('结束执行脚本');
        // 在这里添加停止任务的逻辑
    }
};

// 创建悬浮窗
var floatyWin = floaty.window(
    <vertical padding="16">
        <button id="startBtn" text="开始脚本" bg="#4CAF50"/>
        <button id="stopBtn" text="结束脚本" bg="#F44336" enabled="false"/>
    </vertical>
);

// 开始按钮点击事件
floatyWin.startBtn.click(function () {
    handlers.start();
    ui.run(function () {
        floatyWin.startBtn.enabled = false;
        floatyWin.stopBtn.enabled = true;
    });
});

// 结束按钮点击事件
floatyWin.stopBtn.click(function () {
    handlers.stop();
    ui.run(function () {
        floatyWin.startBtn.enabled = true;
        floatyWin.stopBtn.enabled = false;
    });
});

// 保持悬浮窗不关闭
setInterval(function () {}, 1000);

功能说明:

  • 点击 “开始脚本” 按钮,会调用 handlers.start() 并显示 toast("开始执行脚本")
  • 点击 “结束脚本” 按钮,会调用 handlers.stop() 并显示 toast("结束执行脚本")
  • “开始”按钮按下后禁用自身,“结束”按钮启用;反之亦然。

你可以在注释标记的位置添加具体的脚本任务逻辑和停止逻辑。


补充回答 1

文档地址 https://docs.hamibot.com/

在 Hamibot 中,使用 floaty.window() 创建的悬浮窗默认已经支持拖动功能,不需要额外设置。如果你使用的是 floaty.rawWindow() 创建的悬浮窗,则不会自带拖动功能。

如果你想创建一个可以拖动的悬浮框,请使用 floaty.window() 并传入你的布局:

var window = floaty.window(
  <vertical gravity="center" bg="#FFFFFF" padding="16">
    <text id="label" text="可拖动的悬浮框" textColor="#000000"/>
    <button id="btnClose" text="关闭" layout_gravity="center"/>
  </vertical>
);

// 点击关闭按钮时关闭悬浮框
window.btnClose.click(function () {
  window.close();
});

这段代码会创建一个可以拖动的垂直布局悬浮框,你可以直接拖动整个窗口。

如果还需要自定义调整大小或拖动行为,请参考 floaty.windowfloaty.rawWindow 的更多选项。


补充回答 2

文档地址 https://docs.hamibot.com/

如果你在悬浮框按钮的点击事件中调用 auto() 函数后脚本立即闪退,可能是因为 auto() 被调用时没有正确启动无障碍服务,或者当前脚本环境不支持自动开启无障碍。

解决方案

✅ 1. 确保手动开启了无障碍服务

不要依赖运行时自动开启,建议你先在 Hamibot 应用中手动开启无障碍服务

  • 打开 Hamibot App
  • 进入【我的】>【无障碍设置】
  • 启用对应脚本或全局无障碍服务

✅ 2. 使用前检查是否已启用

你可以在点击按钮执行其他逻辑前,判断是否已经启用无障碍服务:

floatyWin.startBtn.click(function () {
  if (!auto.service) {
    toast("请先开启无障碍服务");
    return;
  }
  // 正常执行脚本逻辑
  // ...
});

这样可以避免因为未开启无障碍导致的崩溃。

✅ 3. 避免在 UI 回调中直接调用 auto()

有些版本中,在按钮回调中直接调用 auto(); 可能会导致异常。建议使用如下方式:

floatyWin.startBtn.click(function () {
  if (!auto.service) {
    auto();
    // 如果 auto() 成功返回 true,说明用户允许了无障碍
    if (auto.service) {
      toast("无障碍已启动");
    } else {
      toast("请手动开启无障碍");
    }
  } else {
    toast("无障碍已经开启");
    // 开始你的自动化任务
  }
});

✅ 4. 检查 Hamibot 版本

确保你使用的 Hamibot 版本是 最新稳定版,旧版本可能存在兼容性问题。


总结处理步骤:

  1. 尽量不要依赖点击按钮时调用 auto() 自动打开无障碍,而是提前手动开启
  2. 在执行自动化操作前检查 auto.service
  3. 不要假设 auto() 调用一定会成功,要添加失败提示逻辑
  4. 更新 Hamibot 到最新版本

如果仍然闪退,请查看 Hamibot 的日志(可在 Hamibot App 内查看)定位具体错误信息。

ℹ️ 本回答由 AI 生成,内容仅供参考