一种 很简单很笨很低级的 悬浮窗按钮暂停脚本 的方法
先看效果
如果还满意你所看到的,就可以继续往下看实现了
一、悬浮窗
autojs 里边有个控制台console,也有个悬浮窗floaty。
我刚开始一直没有分清楚这两个,在这里简单说一下我的认识。
console就是控制台,能显示所有的日志信息。
控制台的布局基本是固定的:
悬浮窗也能实现显示日志信息的功能,不过是通过自己写的方式,而不是直接显示日志。
悬浮窗一般是一片灰色,但是可以自己写布局:
悬浮窗有window和rawWindow
floaty.rawWindow()与floaty.window()函数不同的是,该悬浮窗不会增加任何额外设施(例如调整大小、位置按钮)(就是上图中那三个突兀的黑圈圈),您可以根据自己需要编写任何布局。
我们这里用的是window,自带移动窗体,关闭脚本的功能。
之后会自己写布局,感兴趣的朋友可以收藏关注一下~
二、代码
1.悬浮窗设置
floaty.window(layout):指定悬浮窗的布局,创建并显示一个悬浮窗,返回一个FloatyWindow对象。
其中layout参数可以是xml布局或者一个View。
var 悬浮窗 = floaty.window(
<frame h="auto" w="auto" gravity="center" bg="#77ff0000">
<button id="console" text="暂停" />
</frame>
);
悬浮窗.setPosition(500, 1000) //设置位置(x,y)
悬浮窗.setAdjustEnabled(true) //显示三个按钮
悬浮窗.exitOnClose() //关闭悬浮窗时自动结束脚本运行
2.按钮点击
悬浮窗.id.click(function () { 点击该id的控件后 的操作 }
//指定确定按钮点击时要执行的动作
悬浮窗.console.click(function () {
反状态 = 悬浮窗.console.getText(); //获得id="console"的按钮的文字
if (反状态 == "暂停") {
toast("脚本已暂停");
ui.run(function () {
悬浮窗.console.setText("开始"); //设置按钮文本
});
}
else {
toast("脚本已继续");
ui.run(function () {
悬浮窗.console.setText("暂停");
});
}
});
3.脚本暂停运行 控制检测函数
是通过阻塞来进行脚本暂停的
function kz() {
while (1) {
反状态 = 悬浮窗.console.getText();
//log(反状态)
if (反状态 == "开始") {//反状态为开始时,脚本要暂停,即被阻塞
toastLog("脚本暂停中");
sleep(2000) //这个只影响主程序,就是你可以在这期间点开始运行,在sleep结束后,主程序会继续运行
}
else{//反状态为暂停时,脚本要运行,即跳出死循环
break
}
}
}
4.主线程
个人感觉,检测函数只需要放到 模拟实际操作(如点击、滑动) 的过程中
i = 0
j = 0
while (1) {
kz() //其实这个检测只需要在 模拟操作的 过程中添加,
sleep(1000)
kz() //一般脚本都是模拟人的操作,在这个过程中,点击控件啥的才需要
i = i + 1
kz() //像其他后台分析计算什么的就不太需要了
log(i)
kz()
sleep(2000)
j = j - 1
kz()
log(j)
kz()
}
三、完整代码
var 悬浮窗 = floaty.window(
<frame h="auto" w="auto" gravity="center" bg="#77ff0000">
<button id="console" text="暂停" />
</frame>
);
悬浮窗.setPosition(500, 1000) //设置位置(x,y)
悬浮窗.setAdjustEnabled(true) //显示三个按钮
悬浮窗.exitOnClose() //关闭悬浮窗时自动结束脚本运行
//指定确定按钮点击时要执行的动作
悬浮窗.console.click(function () {
反状态 = 悬浮窗.console.getText(); //获得id="console"的按钮的文字
if (反状态 == "暂停") {
toast("脚本已暂停");
ui.run(function () {
悬浮窗.console.setText("开始"); //设置按钮文本
});
}
else {
toast("脚本已继续");
ui.run(function () {
悬浮窗.console.setText("暂停");
});
}
});
function kz() {
while (1) {
反状态 = 悬浮窗.console.getText();
//log(反状态)
if (反状态 == "开始") {//反状态为开始时,脚本要暂停,即被阻塞
toastLog("脚本暂停中");
sleep(2000) //这个只影响主程序,就是你可以在这期间点开始运行,在sleep结束后,主程序会继续运行
}
else{//反状态为暂停时,脚本要运行,即跳出死循环
break
}
}
}
i = 0
j = 0
while (1) {
kz() //其实这个检测只需要在 模拟操作的 过程中添加,
sleep(1000)
kz() //一般脚本都是模拟人的操作,在这个过程中,点击控件啥的才需要
i = i + 1
kz() //像其他后台分析计算什么的就不太需要了
log(i)
kz()
sleep(2000)
j = j - 1
kz()
log(j)
kz()
}
总结
这个当然又丑,又不高级,算是一个记录吧,至少能实现暂停脚本的功能了,毕竟之前都没想到这种方法。
网上都查不到autojs暂停脚本的方法(可能只是我查不到,如果有现成的还请给我指个路,拜托拜托),只能自己造,即使再垃圾,我这个也算是独一份了,哇咔咔~
之后还会写有更好看界面的悬浮窗,也会写有开始、暂停、继续、停止、打印日志等功能的悬浮窗,如果有更牛的暂停脚本的方法也会继续分享。