这个问题可以利用autojs本身提供的脚本引擎模块来判断.
已知任何系统在相同的路径下,不可能出现两个相同的文件名,因此思路就是在脚本运行的开始, 获取自身的脚本文件名称和脚本所在路径,然后获取所有正在运行的脚本.并提取出所有脚本的脚本名和脚本路径. 再利用本身的脚本名和路径去比对,如果相同的脚本名和路径名存在数量大于1则可证明本次脚本的运行是重复运行的,此时结束掉脚本即可.
代码逻辑如下:
//获取所有正在运行的脚本引擎对象
var allEngines = engines.all();
var strArry = [];
for (let i of allEngines) {
strArry.push(i.source);
strArry.push(i.cwd());
}
//获取当前脚本的执行路径以及脚本名称
var name = engines.myEngine().getSource();
var path = engines.myEngine().cwd();
//判断引擎对象中是否包含本脚本的路径以及名称数量 大于1
var result = statisticalFieldNumber(strArry);
var nameCounts = result[name];
var pathCounts = result[path];
if (nameCounts > 1 && pathCounts > 1) {
toast("当前脚本正在运行,无需重复执行.");
exit();
}
//5秒后弹一个toast,结束运行
setTimeout(function() {
toastLog("end");
}, 5000)
/**
* 该方法判断出传入的数组中所有元素相同的个数,返回一个对象
* @param {arry} arr 一个数组
*/
function statisticalFieldNumber(arr) {
return arr.reduce(function (prev, next) {
prev[next] = (prev[next] + 1) || 1;
return prev;
}, {});
}
全部0条评论
快来发表一下你的评论吧 !