autojs学习笔记及资源
toastLog site:hexuesong.cn 检索
设备信息
console.show();
var str = "";
str += "屏幕宽度:" + device.width;
str += "\n屏幕高度:" + device.height;
str += "\nbuildId:" + device.buildId;
str += "\n主板:" + device.board;
str += "\n制造商:" + device.brand;
str += "\n工业设计名称:" + device.device;
str += "\n产品名称:" + device.product;
str += "\n型号:" + device.model;
str += "\nbootloader版本:" + device.bootloader;
str += "\n硬件名称:" + device.hardware;
str += "\n唯一标识码:" + device.fingerprint;
str += "\n硬件序列号:"+device.serial;
str += "\nIncremental:"+device.incremental;
str += "\nAndroid系统版本号:"+device.release;
str += "\nBaseOS:"+device.baseOS;
str += "\n安全补丁程序级别:"+device.securityPatch;
str += "\n开发代号:"+device.codename;
str += "\n内存总量:"+device.getTotalMem();
str += "\n当前可用内存:"+device.getAvailMem();
str += "\nAndroidId: " + device.getAndroidId();
str += "\nMac: " + device.getMacAddress();
str += "\nAPI: " + device.sdkInt;
str += "\n电量: " + device.getBattery();
str += "\nIMEI: " + device.getIMEI();
toastLog(str);复制代码
UI控件
按钮控件
"ui";
ui.layout(
<vertical padding="16">
<button text="普通按钮" w="auto"/>
<button text="带颜色按钮" style="Widget.AppCompat.Button.Colored"
w="auto"/>
<button text="无边框按钮" style="Widget.AppCompat.Button.Borderless"
w="auto"/>
<button text="无边框有颜色按钮"
style="Widget.AppCompat.Button.Borderless.Colored" w="auto"/>
<button text="长长的按钮" w="*"/>
<button id="click_me" text="点我" w="auto"/>
</vertical>
);
ui.click_me.on("click", ()=>{
toast("我被点啦");
});
ui.click_me.on("long_click", ()=>{
toast("我被长按啦");
});复制代码
复选框与单选框控件
"ui";
ui.layout(
<vertical padding="16">
<checkbox id="cb1" text="复选框"/>
<checkbox id="cb2" checked="true" text="勾选的复选框"/>
<radiogroup>
<radio text="单选框1"/>
<radio text="单选框2"/>
<radio text="单选框3"/>
</radiogroup>
<radiogroup mariginTop="16">
<radio text="单选框1"/>
<radio text="单选框2"/>
<radio text="勾选的单选框3" checked="true"/>
</radiogroup>
</vertical>
);
ui.cb1.on("check", (checked)=>{
if(checked){
toast("第一个框被勾选了");
}else{
toast("第一个框被取消勾选了");
}
});
复制代码
进度条控件
"ui";
ui.layout(
<vertical padding="16">
<text text="处理中..." textColor="black" textSize="16sp"/>
<progressbar />
<text text="直线无限进度条" textColor="black" textSize="16sp"
marginTop="24"/>
<progressbar indeterminate="true"
style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"/>
<text text="直线进度条" textColor="black" textSize="16sp" marginTop="24"/>
<progressbar progress="30"
style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"/>
<text text="可调节进度条" textColor="black" textSize="16sp"
marginTop="24"/>
<seekbar progress="20"/>
<horizontal gravity="center" marginTop="24">
<text id="progress_value" textColor="black" textSize="16sp"
margin="8" text="0"/>
<progressbar id="progress" w="*"
style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"/>
</horizontal>
<button id="download">开始下载</button>
</vertical>
);
var downloadId = null;
ui.download.click(()=>{
if(downloadId != null){
stopDownload();
}else{
startDownload();
}
});
function stopDownload(){
ui.download.text("开始下载");
clearInterval(downloadId);
downloadId = null;
}
function startDownload(){
if(ui.progress.getProgress() == 100){
ui.progress.setProgress(0);
}
ui.download.text("停止下载");
downloadId = setInterval(()=>{
var p = ui.progress.getProgress();
p++;
if(p > 100){
stopDownload();
return;
}
ui.progress.setProgress(p);
ui.progress_value.setText(p.toString());
}, 200);
}
复制代码
卡片布局
"ui";
ui.layout(
<vertical>
<appbar>
<toolbar id="toolbar" title="卡片布局" />
</appbar>
<card w="*" h="70" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<text text="写操作系统作业" textColor="#222222" textSize="16sp" />
<text text="明天第1~2节" textColor="#999999" textSize="14sp" />
</vertical>
<View bg="#f44336" h="*" w="10" />
</card>
<card w="*" h="70" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<text text="修复ui模式的Bug" textColor="#222222" textSize="16sp" />
<text text="无限期" textColor="#999999" textSize="14sp" />
</vertical>
<View bg="#ff5722" h="*" w="10" />
</card>
<card w="*" h="70" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<text text="发布Auto.js 5.0.0正式版" textColor="#222222"
textSize="16sp" />
<text text="2019年1月" textColor="#999999" textSize="14sp" />
</vertical>
<View bg="#4caf50" h="*" w="10" />
</card>
<card w="*" h="70" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<text text="完成毕业设计和论文" textColor="#222222"
textSize="16sp" />
<text text="2019年4月" textColor="#999999" textSize="14sp" />
</vertical>
<View bg="#2196f3" h="*" w="10" />
</card>
</vertical>
);
复制代码
列表控件
"ui";
ui.layout(
<frame>
<list id="list">
<vertical>
<text id="name" textSize="16sp" textColor="#000000" text="姓名:
{{name}}"/>
<text id="age" textSize="16sp" textColor="#000000" text="年龄:
{{age}}岁"/>
<button id="deleteItem" text="删除" />
</vertical>
</list>
</frame>
);
var items = [
{name: "小明", age: 18}, {name: "小红", age: 30},
{name: "小东", age: 19}, {name: "小强", age: 31},
{name: "小满", age: 20}, {name: "小一", age: 32},
{name: "小和", age: 21}, {name: "小二", age: 1},
{name: "小贤", age: 22}, {name: "小三", age: 2},
{name: "小伟", age: 23}, {name: "小四", age: 3},
{name: "小黄", age: 24}, {name: "小五", age: 4},
{name: "小健", age: 25}, {name: "小六", age: 5},
{name: "小啦", age: 26}, {name: "小七", age: 6},
{name: "小哈", age: 27}, {name: "小八", age: 7},
{name: "小啊", age: 28}, {name: "小九", age: 8},
{name: "小啪", age: 29}, {name: "小十", age: 9}
];
ui.list.setDataSource(items);
ui.list.on("item_click", function (item, i, itemView, listView) {
toast("被点击的人名字为: " + item.name + ",年龄为: " + item.age);
});
ui.list.on("item_bind", function (itemView, itemHolder) {
itemView.deleteItem.on("click", function () {
let item = itemHolder.item;
toast("被删除的人名字为: " + item.name + ",年龄为: " + item.age);
items.splice(itemHolder.position, 1);
});
})复制代码
图片控件
"ui";
ui.layout(
<scroll>
<vertical bg="#707070" padding="16">
<text text="网络图片" textColor="black" textSize="16sp" marginTop="16" />
<img src="http://www.autojs.org/assets/uploads/profile/3-
profileavatar.png"
w="100" h="100" />
<text text="带边框的图片" textColor="black" textSize="16sp"
marginTop="16" />
<img src="http://www.autojs.org/assets/uploads/profile/1-
profileavatar.jpeg"
w="100" h="100" borderWidth="2dp" borderColor="#202020" />
<text text="圆形图片" textColor="black" textSize="16sp" marginTop="16" />
<img src="http://www.autojs.org/assets/uploads/profile/1-
profileavatar.jpeg"
w="100" h="100" circle="true" />
<text text="带边框的圆形图片" textColor="black" textSize="16sp"
marginTop="16" />
<img src="http://www.autojs.org/assets/uploads/profile/1-
profileavatar.jpeg"
w="100" h="100" circle="true" borderWidth="2dp"
borderColor="#202020" />
<text text="圆角图片" textColor="black" textSize="16sp" marginTop="16" />
<img id="rounded_img"
src="http://www.autojs.org/assets/uploads/profile/1-profileavatar.jpeg"
w="100" h="100" radius="20dp" scaleType="fitXY" />
<button id="change_img" text="更改图片" />
</vertical>
</scroll>
);
ui.change_img.on("click", () => {
ui.rounded_img.setSource("http://www.autojs.org/assets/uploads/profile/1-profilecover.jpeg");
});
复制代码
文本控件
"ui";
ui.layout(
<vertical padding="16">
<text textSize="40sp">大字</text>
<text textSize="12sp">小字</text>
<text textStyle="bold" textColor="black">加粗</text>
<text textStyle="italic">斜体</text>
<text textColor="#00ff00">原谅色</text>
<text margin="8">Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移
动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大
陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8
月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联
盟共同研发改良Android系统。</text>
<text maxLines="1" ellipsize="end" margin="8">Android是一种基于Linux的自由
及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领
导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy
Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软
件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。</text>
<text maxLines="2" ellipsize="end" margin="8">Android是一种基于Linux的自由
及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领
导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy
Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软
件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。</text>
<text w="*" gravity="center" textSize="20sp">居中</text>
<text autoLink="all">自动超链接网址www.baidu.com, 邮箱 123@qq.com等</text>
</vertical>
);
复制代码
下拉菜单
"ui";
ui.layout(
<vertical padding="16">
<horizontal>
<text textSize="16sp">下拉菜单</text>
<spinner id="sp1" entries="选项1|选项2|选项3" />
</horizontal>
<horizontal>
<text textSize="16sp">对话框菜单</text>
<spinner id="sp2" entries="选项4|选项5|选项6" spinnerMode="dialog" />
</horizontal>
<button id="ok">确定</button>
<button id="select3">选择选项3</button>
</vertical>
);
ui.ok.on("click", () => {
var i = ui.sp1.getSelectedItemPosition();
var j = ui.sp2.getSelectedItemPosition();
toast("您的选择是选项" + (i + 1) + "和选项" + (j + 4));
});
ui.select3.on("click", () => {
ui.sp1.setSelection(2);
});复制代码
自定义控件-带颜色按钮
"ui";
var ColoredButton = (function () {
//继承ui.Widget
util.extend(ColoredButton, ui.Widget);
function ColoredButton() {
//调用父类构造函数
ui.Widget.call(this);
//自定义属性color,定义按钮颜色
this.defineAttr("color", (view, name, defaultGetter) => {
return this._color;
}, (view, name, value, defaultSetter) => {
this._color = value;
view.attr("backgroundTint", value);
});
//自定义属性onClick,定义被点击时执行的代码
this.defineAttr("onClick", (view, name, defaultGetter) => {
return this._onClick;
}, (view, name, value, defaultSetter) => {
this._onClick = value;
});
}
ColoredButton.prototype.render = function () {
return (
<button textSize="16sp" style="Widget.AppCompat.Button.Colored"
w="auto" />
);
}
ColoredButton.prototype.onViewCreated = function (view) {
view.on("click", () => {
if (this._onClick) {
eval(this._onClick);
}
});
}
ui.registerWidget("colored-button", ColoredButton);
return ColoredButton;
})();
ui.layout(
<vertical>
<colored-button text="第一个按钮" color="#ff5722" />
<colored-button text="第二个按钮" onClick="hello()" />
</vertical>
);
function hello() {
alert("Hello ~");
}复制代码
HTTP简介
图色处理
颜色获取和检测
if (!requestScreenCapture()) {
toast("请求截图失败");
exit
}
sleep(2000);
var x = 760;
var y = 180;
//获取在点(x, y)处的颜色
var c = images.pixel(captureScreen(), x, y);
//显示该颜色
var msg = "";
msg += "在位置(" + x + ", " + y + ")处的颜色为" + colors.toString(c);
msg += "\nR = " + colors.red(c) + ", G = " + colors.green(c) + ", B = " +
colors.blue(c);
//检测在点(x, y)处是否有颜色#73bdb6 (模糊比较)
var isDetected = images.detectsColor(captureScreen(), "#73bdb6", x, y);
msg += "\n该位置是否匹配到颜色#73bdb6: " + isDetected;
alert(msg);
复制代码
精确找色
if (!requestScreenCapture()) {
toast("请求截图失败");
stop();
}
var img = captureScreen();
toastLog("开始找色");
//0x1d75b3为编辑器默认主题蓝色字体(if, var等关键字)的颜色
//找到颜色与0x1d75b3完全相等的颜色
var point = findColorEquals(img, 0x006699);
if (point) {
toastLog("x = " + point.x + ", y = " + point.y);
} else {
toastLog("没有找到");
}复制代码
模糊找色
if (!requestScreenCapture()) {
toast("请求截图失败");
exit();
}
var img = captureScreen();
//0x9966ff为编辑器紫色字体的颜色
toastLog("开始找色");
var point = findColor(img, 0x9966ff);
if (point) {
toastLog("x = " + point.x + ", y = " + point.y);
} else {
toastLog("没有找到");
}复制代码
区域找色1
if (!requestScreenCapture()) {
toast("请求截图失败");
exit();
}
var img = captureScreen();
toastLog("开始找色");
//指定在位置(100, 220)宽高为400*400的区域找色。
//#75438a是编辑器默认主题的棕红色字体(数字)颜色,位置大约在第5行的"2000",坐标大约为(283,
465)
var point = findColorInRegion(img, "#75438a", 90, 220, 900, 1000);
if (point) {
toastLog("x = " + point.x + ", y = " + point.y);
} else {
toastLog("没有找到");
}复制代码
区域找色2
if (!requestScreenCapture()) {
toast("请求截图失败");
exit();
}
var img = captureScreen();
//0xffffff为白色
toastLog("开始找色");
//指定在位置(90, 220)宽高为900*1000的区域找色。
//0xff00cc是编辑器的深粉红色字体(字符串)颜色
var point = findColor(img, "#ff00cc", {
region: [90, 220, 900, 1000],
threads: 8
});
if (point) {
toastLog("x = " + point.x + ", y = " + point.y);
} else {
toastLog("没有找到");
}复制代码
findOne和findOnce和find的区别
1、findOne()
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,直到屏幕上出现满足条件的一个控件为止, 并返回该控件。如果找不到控件,当屏幕内容发生变化时会重新寻找,直至找到。
需要注意的是,如果屏幕上一直没有出现所描述的控件,则该函数会阻塞,直至所描述的控件出现为止。因此 此函数不会返回null。
如果想要只在屏幕上搜索一次而不是一直搜索,请使用findOnce()。 另外,如果屏幕上有多个满足条件的控件,findOne()采用深度优先搜索(DFS),会返回该搜索算法找到的第 一个控件。
寻找控件建议不要用findOne()、waitFor()、exists()等一些会阻塞的方法,不然稍微出现一点其他事 件就会阻塞,导致脚本莫名其妙的卡死,使用findOne(timeout)。
2、findOnce()
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,如果找到符合条件的控件则返回该控件;否 则返回null。
3、find()
查找所有控件。
学习笔记
文档资源链接
- Auto.js4.1.0文档
- AutoxJs 文档
- 飞云脚本
- Autojs 4.1.1实战教程
- autojs基础入门教程__视频
- autojs做一个脚本商店
- 【AutoJs】[王者]一键换装源码 - 哔哩哔哩
- Auto.js基础入门教程--哔哩哔哩视频
- https://github.com/kkevsekk1/AutoX/releases | Releases · kkevsekk1/AutoX
- https://github.com/kkevsekk1/webpack-autojs | kkevsekk1/webpack-autojs
本文为作者原创文章,转载无需和我联系,但请注明转载链接。 【前端黑猫】