将此代码里插入控制器可以开始暂停即可
// 文档地址:https://docs.hamibot.com/
// var handlers = {
running: false,
start: function () {
if (this.running) return;
this.running = true;
toast("任务开始");
// 主循环(简化版)
while (true) {
try {
// 1. 检查最高优先级按钮
let found = false;
let buttons = ["就是这家", "确认无误"];
for (let btn of buttons) {
let element = text(btn).findOne(50);
if (element) {
console.log("🔥 点击: " + btn);
element.click();
found = true;
sleep(500);
break;
}
}
if (found) continue;
// 2. 检查高优先级按钮
buttons = ["确认信息并支付"];
for (let btn of buttons) {
let element = text(btn).findOne(50);
if (element) {
console.log("🔺 点击: " + btn);
element.click();
found = true;
sleep(500);
break;
}
}
if (found) continue;

    // 3. 检查中优先级按钮
    buttons = ["确定"];
    for (let btn of buttons) {
        let element = text(btn).findOne(20);
        if (element) {
            console.log("🟡 点击: " + btn);
            element.click();
            found = true;
            sleep(100);
            break;
        }
    }
    if (found) continue;

    // 4. 检查低优先级按钮
    buttons = ["立即购买"];
    for (let btn of buttons) {
        let element = text(btn).findOne(50);
        if (element) {
            console.log("🔵 点击: " + btn);
            element.click();
            found = true;
            sleep(500);
            break;
        }
    }
    if (found) continue;
    // 5. 检查配送模式
    let deliveryButtons = ["送到家", "到店取"];
    for (let btn of deliveryButtons) {
        let element = text(btn).findOne(50);
        if (element) {
            console.log("🔄 配送点击: " + btn);
            element.click();
            sleep(150); // 切换速度
            break;
        }
    }
    // 没有找到任何按钮
    sleep(50);
} catch (e) {
    console.log("⚠️ 小错误: " + e);
    sleep(1000);
}

}
// 确保永不退出
setInterval(() => {}, 1000);
// 在这里添加你的任务代码
},
stop: function () {
if (!this.running) return;
this.running = false;
toast("任务暂停");
// 主循环(简化版)
while (true) {
try {
// 1. 检查最高优先级按钮
let found = false;
let buttons = ["就是这家", "确认无误"];
for (let btn of buttons) {
let element = text(btn).findOne(50);
if (element) {
console.log("🔥 点击: " + btn);
element.click();
found = true;
sleep(500);
break;
}
}
if (found) continue;
// 2. 检查高优先级按钮
buttons = ["确认信息并支付"];
for (let btn of buttons) {
let element = text(btn).findOne(50);
if (element) {
console.log("🔺 点击: " + btn);
element.click();
found = true;
sleep(500);
break;
}
}
if (found) continue;
// 3. 检查中优先级按钮
buttons = ["确定"];
for (let btn of buttons) {
let element = text(btn).findOne(20);
if (element) {
console.log("🟡 点击: " + btn);
element.click();
found = true;
sleep(100);
break;
}
}
if (found) continue;
// 4. 检查低优先级按钮
buttons = ["立即购买"];
for (let btn of buttons) {
let element = text(btn).findOne(50);
if (element) {
console.log("🔵 点击: " + btn);
element.click();
found = true;
sleep(500);
break;
}
}
if (found) continue;
// 5. 检查配送模式
let deliveryButtons = ["送到家", "到店取"];
for (let btn of deliveryButtons) {
let element = text(btn).findOne(50);
if (element) {
console.log("🔄 配送点击: " + btn);
element.click();
sleep(150); // 切换速度
break;
}
}
// 没有找到任何按钮
sleep(50);
} catch (e) {
console.log("⚠️ 小错误: " + e);
sleep(1000);
}
}
// 确保永不退出
setInterval(() => {}, 1000);
// 在这里添加你的任务代码
// 在这里添加停止任务的代码
}
};

// 创建悬浮窗
var floatyWin = floaty.window(
<vertical padding="16">
<button id="startBtn" text="开始" bg="#4CAF50"/>
<button id="pauseBtn" text="暂停" bg="#F44336"/>
</vertical>
);
// 开始按钮点击事件
floatyWin.startBtn.click(function () {
handlers.start();
});
// 暂停按钮点击事件
floatyWin.pauseBtn.click(function () {
handlers.stop();
});
// 保持悬浮窗不被关闭
setInterval(function () {}, 1000);

已存档
krawfndbai · 1 个月前
第 1 条补充
·
1 个月前

在此基础上完善并添加可以自主调整速率的控制按钮以及源码 调整范围在0-500
添加购买数量 可更改数量1还是2个的选项或1盒
更改控制台颜色 为灰色和黑色
让控制台可以随意更改位置 并且可以隐藏或显示

回答

Hamibot AI
1
· 1 个月前

要实现任务的开始与暂停控制,需要对代码进行以下优化:

核心修改说明

  1. 状态机控制:通过 handlers.running 变量控制循环状态
  2. 循环条件重构:将死循环改为带状态检测的可控循环
  3. 逻辑分离:start 方法仅启动任务,stop 方法仅控制状态

修改后的完整代码

// 文档地址:https://docs.hamibot.com/
var handlers = {
    running: false,
    start: function () {
        if (this.running) return;
        this.running = true;
        toast("任务开始");

        // 独立任务线程
        threads.start(function() {
            while (handlers.running) {
                try {
                    // 1. 检查最高优先级按钮
                    let found = false;
                    let buttons = ["就是这家", "确认无误"];
                    for (let btn of buttons) {
                        let element = text(btn).findOne(50);
                        if (element) {
                            console.log("🔥 点击: " + btn);
                            element.click();
                            found = true;
                            sleep(500);
                            break;
                        }
                    }
                    if (found) continue;

                    // 2. 检查高优先级按钮
                    buttons = ["确认信息并支付"];
                    for (let btn of buttons) {
                        let element = text(btn).findOne(50);
                        if (element) {
                            console.log("🔺 点击: " + btn);
                            element.click();
                            found = true;
                            sleep(500);
                            break;
                        }
                    }
                    if (found) continue;

                    // 3. 检查中优先级按钮
                    buttons = ["确定"];
                    for (let btn of buttons) {
                        let element = text(btn).findOne(20);
                        if (element) {
                            console.log("🟡 点击: " + btn);
                            element.click();
                            found = true;
                            sleep(100);
                            break;
                        }
                    }
                    if (found) continue;

                    // 4. 检查低优先级按钮
                    buttons = ["立即购买"];
                    for (let btn of buttons) {
                        let element = text(btn).findOne(50);
                        if (element) {
                            console.log("🔵 点击: " + btn);
                            element.click();
                            found = true;
                            sleep(500);
                            break;
                        }
                    }
                    if (found) continue;

                    // 5. 检查配送模式
                    let deliveryButtons = ["送到家", "到店取"];
                    for (let btn of deliveryButtons) {
                        let element = text(btn).findOne(50);
                        if (element) {
                            console.log("🔄 配送点击: " + btn);
                            element.click();
                            sleep(150); // 切换速度
                            break;
                        }
                    }
                    // 没有找到任何按钮
                    sleep(50);
                } catch (e) {
                    console.log("⚠️ 小错误: " + e);
                    sleep(1000);
                }
            }
            toast("任务已暂停");
        });
    },
    stop: function () {
        this.running = false;
        toast("任务暂停");
    }
};

// 创建悬浮窗
var floatyWin = floaty.window(
    <vertical padding="16">
        <button id="startBtn" text="开始" bg="#4CAF50"/>
        <button id="pauseBtn" text="暂停" bg="#F44336"/>
    </vertical>
);

// 开始按钮点击事件
floatyWin.startBtn.click(function () {
    handlers.start();
});

// 暂停按钮点击事件
floatyWin.pauseBtn.click(function () {
    handlers.stop();
});

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

改进说明

  1. 线程隔离:将主循环放入独立线程,避免阻塞UI
  2. 精准控制:循环条件改为 while(handlers.running),确保状态变化立即生效
  3. 清晰反馈:添加开始/暂停时的提示toast
  4. 异常保护:保留原有错误处理机制
  5. 结构优化:移除重复代码,提升可维护性

使用方式

  1. 点击"开始"按钮启动任务
  2. 点击"暂停"按钮随时停止任务
  3. 再次点击"开始"可恢复任务执行

该方案实现了精准的任务控制,保证了代码的可读性和可维护性,同时保持了原有功能的完整性。


补充回答 1

以下是集成所有需求的完整解决方案:

// 文档地址:https://docs.hamibot.com/
var config = {
    rate: 200,      // 初始速率
    quantity: 1,    // 默认购买数量
    running: false
};

// 创建主悬浮窗
var floatyWin = floaty.window(
    <vertical padding="10" bg="#333333" gravity="center">
        <horizontal gravity="center">
            <button id="startBtn" text="开始" bg="#4CAF50" w="80" h="40"/>
            <button id="pauseBtn" text="暂停" bg="#F44336" w="80" h="40"/>
        </horizontal>
        
        <text text="速率调节 (0-500ms)" textColor="#FFFFFF" textSize="14sp"/>
        <seekbar id="rateBar" progress="20" max="50" w="200"/>
        <text id="rateText" text="当前速率: 200ms" textColor="#FFFFFF" textSize="12sp"/>
        
        <text text="购买数量" textColor="#FFFFFF" textSize="14sp"/>
        <radiogroup id="quantityGroup">
            <horizontal>
                <radio id="radio1" text="1个" textColor="#FFFFFF"/>
                <radio id="radio2" text="2个" textColor="#FFFFFF"/>
                <radio id="radio3" text="1盒" textColor="#FFFFFF"/>
            </horizontal>
        </radiogroup>
        
        <button id="posBtn" text="移动控制台" bg="#2196F3" w="120" h="30"/>
        <button id="hideBtn" text="隐藏控制台" bg="#9E9E9E" w="120" h="30"/>
    </vertical>
);

// 初始化配置
config.quantity = 1;
floatyWin.radio1.checked = true;

// 自定义控制台悬浮窗
var consoleWin = floaty.rawWindow(
    <vertical w="250" h="300" bg="#1a1a1a">
        <text id="consoleTitle" text="调试控制台" textColor="#CCCCCC" textSize="16sp" padding="8"/>
        <com.stardust.autojs.core.console.ConsoleView id="consoleView" bg="#000000"/>
    </vertical>
);

// 设置控制台可移动
floatyWin.setPosition(100, 100);
floatyWin.setOnTouchListener(function(view, event) {
    if(event.action == android.view.MotionEvent.ACTION_MOVE) {
        floatyWin.setPosition(event.rawX, event.rawY);
    }
    return true;
});

// 速率调节事件
floatyWin.rateBar.on("progressChanged", function(progress, fromUser) {
    if(fromUser) {
        config.rate = progress * 10;
        floatyWin.rateText.setText("当前速率: " + config.rate + "ms");
    }
});

// 数量选择事件
floatyWin.quantityGroup.on("check", function(id) {
    switch(id) {
        case floatyWin.radio1.id:
            config.quantity = 1;
            break;
        case floatyWin.radio2.id:
            config.quantity = 2;
            break;
        case floatyWin.radio3.id:
            config.quantity = "1盒";
            break;
    }
});

// 控制台移动按钮
floatyWin.posBtn.click(function() {
    var randomX = Math.floor(Math.random() * (device.width - 200));
    var randomY = Math.floor(Math.random() * (device.height - 300));
    consoleWin.setPosition(randomX, randomY);
});

// 控制台显示/隐藏切换
floatyWin.hideBtn.click(function() {
    if(consoleWin.isShowing()) {
        consoleWin.hide();
        floatyWin.hideBtn.setText("显示控制台");
    } else {
        consoleWin.show();
        floatyWin.hideBtn.setText("隐藏控制台");
    }
});

// 任务控制处理器
var handlers = {
    start: function () {
        if (config.running) return;
        config.running = true;
        toast("任务开始");
        
        threads.start(function() {
            while (config.running) {
                try {
                    // 1. 检查最高优先级按钮
                    let found = false;
                    let buttons = ["就是这家", "确认无误"];
                    for (let btn of buttons) {
                        let element = text(btn).findOne(50);
                        if (element) {
                            log("🔥 点击: " + btn + " (数量: " + config.quantity + ")");
                            element.click();
                            found = true;
ℹ️ 本回答由 AI 生成,内容仅供参考