├── 111111111柴房
├── 2222222.js
├── yeah.png
├── 微信赞赏码.png
└── 支付宝收款码.jpg
├── README.md
├── UI
├── 1怎样动态增加text标签157.js
├── 1改变字体大小和内容148.js
├── 1改变字体颜色大小和内容118.js
├── 1鸣人分身158.js
├── 3d视角图3.js
├── Auto.js教程浏览器162.js
├── Switch控件242.js
├── UI和悬浮窗一起使用的完整栗子
│ ├── main.js
│ ├── view点击事件.js
│ ├── window在屏幕之内.js
│ ├── 多线程控制悬浮窗.js
│ ├── 小红点悬浮球.js
│ ├── 带属性的悬浮窗.js
│ ├── 悬控移动和点击.js
│ ├── 悬浮窗输入框.js
│ ├── 接码窗口.js
│ ├── 控制台.js
│ ├── 浏览器窗口.js
│ ├── 滑动效果.js
│ └── 移动悬浮窗.js
├── UI控件隐藏.js
├── UI文件选择442.js
├── UI轮播图
├── WebView多页面浏览.js
├── WebView简单示例安卓调用js428.js
├── activity.js
├── activity和context.js
├── aj功能搜索.js
├── autojs教程瀏覽器.js
├── bmob用户验证demoV1.js
├── drawer.js
├── fab.js
├── getPixels参数详解.js
├── list显示脚本文件夹下所有js文件.js
├── list隔行变色.js
├── scroll的使用.js
├── spinner.js
├── switch控件.js
├── ui保存控件属性3.js
├── ui多界面215.js
├── ui属性.js
├── ui延时.js
├── ui开关控件236.js
├── ui显示日志.js
├── ui示例下方tabs
├── ui示例下方tabs(1.0.0-1 修复宽度不适配问题).js
├── ui脚本使用无障碍的最佳实践.js
├── unlock.js
├── unlock306.js
├── webViewClient的用法.js
├── webViewCookie.js
├── webViewUA切换.js
├── webView保存网页图片到本地.js
├── webView填充表单.js
├── webView提取图片地址并加载.js
├── webView攀登.js
├── webView获取网页原始图片.js
├── webView输入关键词搜索.js
├── webviewClient的使用方法.js
├── windowFlag.js
├── windowManager.js
├── 一开始不要显示输入法.js
├── 下拉框控制文本框表驱动.js
├── 二值化图片seekbar.js
├── 任性弹窗.js
├── 使用自带图标--图片相交的效果PorterDuffXfermode.js
├── 保存imgView加载的图片.js
├── 保存imgView加载的图片第二种方法.js
├── 全局半透明背景1192.js
├── 全屏显示背景图191.js
├── 列表控件(1).js
├── 制作浏览器.js
├── 动态布局.js
├── 动态改变控件大小和位置.js
├── 动态显示隐藏布局156.js
├── 包名查看器5125.js
├── 单选按钮demo.js
├── 双击返回退出的ui.js
├── 只能在autojs弹框.js
├── 图中图效果(镜中镜)
│ ├── init悬浮窗2222222222222222222.js
│ ├── 一个倍数一个图片.js
│ └── 矩阵变图片.js
├── 图片圆角.js
├── 在ui中使用悬浮窗demo.js
├── 在别的脚本中获取ui的控件属性
│ ├── ui模块.js
│ └── 获取ui模块中按钮的文本.js
├── 坐标点击和控件点击测试.js326.js
├── 基础图片查看122.js
├── 声音示波器2.js
├── 复选框.js
├── 多任务计时器117.js
├── 多点_取色_点线.js
├── 多重绕轴画图.js
├── 帧布局139.js
├── 应用列表320.js
├── 待办事项_全选.js
├── 循环缩放webView.js
├── 快手组队助力脚本.js
├── 悬浮窗和UI一起使用的例子
│ ├── main.js
│ ├── view点击事件.js
│ ├── window在屏幕之内.js
│ ├── 多线程控制悬浮窗.js
│ ├── 小红点悬浮球.js
│ ├── 带属性的悬浮窗.js
│ ├── 悬控移动和点击.js
│ ├── 接码窗口.js
│ ├── 控制台.js
│ ├── 浏览器窗口.js
│ ├── 滑动效果.js
│ └── 移动悬浮窗.js
├── 手勢模塊
│ ├── 44.png
│ ├── onetouch.js
│ └── 手势.js
├── 拖动条控件.js
├── 拨号盘.js
├── 拨号盘1409.js
├── 按钮平分.js
├── 按钮设置图片demo.js
├── 接入天御滑动验证码.js
├── 控件坐标系变换最终版.js
├── 控件自身绘制坐标系的变换.js
├── 播放gif161.js
├── 数字键盘.js
├── 数字键盘186.js
├── 数字键盘输入.js
├── 数字键盘输入196.js
├── 文件查看.js
├── 文件查看385.js
├── 文件浏览器419.js
├── 文本搜索高亮.js
├── 文本搜索高亮231.js
├── 显示指定控件信息
├── 显示网页.js
├── 最最原始的验证码.js
├── 本地图片浏览器390.js
├── 模糊的百度.js
├── 欢迎页.js
├── 海贼王之家.js
├── 清晰的百度.js
├── 演示ColorMatrix各个值的用法.js
├── 登录258.js
├── 监听
│ ├── spinner.js
│ ├── 单选按钮demo.js
│ ├── 悬控移动和点击.js
│ ├── 横竖屏监听.js
│ └── 输入框删除监听.js
├── 相对布局137.js
├── 答题搜索3105.js
├── 线性布局134.js
├── 脚本文件夹276.js
├── 脚本管理工具UI示例337.js
├── 自动机.js
├── 自动机146.js
├── 自定义canvasButton.js
├── 自定义向上浮动view.js
├── 获取UI界面控件宽度和高度.js
├── 获取ui界面左上角坐标.js
├── 获取手机应用信息(对话框).js
├── 表格布局283.js
├── 视频播放器--带注释.js
├── 视频播放器.js
├── 设置三秒后才能点击.js
├── 设置按钮三秒后才能点击311.js
├── 设置界面颜色149.js
├── 调色板.js
├── 足艺阁图片浏览器 密码666420.js
├── 跑马灯.js
├── 跑马灯首尾相接无缝隙.js
├── 轮播图.js
├── 输入框光标.js
├── 运动的小球.js
├── 运行勾选的脚本.js
├── 遍历查找指定类型的子控件.js
├── 配音阁webView填表.js
├── 随机颜色.js
├── 隐藏控件.js
└── 音波调频3.js
├── app操作
├── app启动停止和输入.js
├── 卸载所有分身加上非root卸载1298.js
├── 强制更新.js
├── 我经常用的shell命令.txt
├── 打开app安装界面.js
├── 最新安装的app176.js
├── 禁止联网133.js
├── 结束autojs自己.js
├── 获取app图标1229.js
├── 获取app安装时间153.js
└── 获取指定应用的版本号.js
├── autojsCommonFunctions.js
├── autojs机器人关键词.js
├── bmob
├── bmob用户表的增删改查.js
├── bmob示例-对象的增删改查424.js
└── 发送手机上的app到bmob.js
├── canvas
├── ColorMatrix各个值的用法.js
├── app打开链接和图片添加水印.js
├── canvas画正方形117.js
├── qq消息周围画边框.js
├── 一直在跳的球255.js
├── 一箭穿心.js
├── 一箭穿心376.js
├── 一致在跳的球.js
├── 世上最无聊的脚本115.js
├── 任意扭转图片160.js
├── 传感器图像03.06_最新版399.js
├── 俄罗斯方块半成品182.js
├── 像素印画Ⅱ_正式版141.js
├── 像素绘画.js
├── 像素绘画1235.js
├── 分形
│ ├── 二叉树分形图.js
│ ├── 叶子.js
│ ├── 树杈.js
│ ├── 树杈2.js
│ ├── 歇尔宾斯基三角.js
│ ├── 科赫雪花.js
│ ├── 经典分形图案Mandelbrot.js
│ ├── 龙形线慢慢画.js
│ └── 龙行线带补间动画.js
├── 吸星大法.js
├── 图片加文字383.js
├── 图片加水印.js
├── 坐标类自动操作$动作录制241.js
├── 彩色星空187.js
├── 截图取色1194.js
├── 截图查看113.js
├── 截图水印.js
├── 截图水印412.js
├── 手指动作录制168.js
├── 控件布局层次动态.js
├── 教程_多点触控6144.js
├── 教程_画布159.js
├── 教程_矩阵.js
├── 教程多点触控.js
├── 旋转的小白.js
├── 时钟球球动画.js
├── 时钟球球动画205.js
├── 星系.js
├── 最小可点击控件213.js
├── 有点真实的星系.js
├── 桌球.js
├── 模仿抽屉第二版.js
├── 正方形和圆形的结晶.js
├── 流星.js
├── 球球中袋.js
├── 生成迷宫.js
├── 画小猪佩奇.js
├── 画正方形.js
├── 画画149.js
├── 立方体.js
├── 线球.js
├── 线球2.js
├── 线球41381.js
├── 贝塞尔曲线.js
└── 这算分形吗.js
├── events
├── 按下键停止脚本运行252.js
└── 气泡监听和移除.js
├── git常用命令.txt
├── http
├── 1查询本机IP地理位置322.js
├── HTTP请求315.js
├── [Http代理] 讯代理_优质代理425.js
├── httpBuild.js
├── http超时返回null.js
├── ip地址查询UI225.js
├── jsoupDemo.js
├── tcp连接客户端105.js
├── 下载文件百分比.js
├── 下载王者荣耀全英雄头像.js
├── 启动github下载的脚本114.js
├── 喜马拉雅下载某专辑.js
├── 妹子图批量.js
├── 带进度条文件更新.js
├── 格式化headers.js
├── 爬取bilibili视频弹幕.js
├── 爬取百度贴吧.js
├── 百度贴吧一键签到1167.js
├── 获取内外网ip地址.js
└── 跑步.js
├── intent
├── Intent生成器263.js
├── intent生成器.js
├── 分享多个文件.js
├── 分享多个文件270.js
├── 发送广播.js
├── 启动脚本autojsProIntent.js
├── 启动脚本data.js
├── 启动脚本extras.js
├── 安卓intent源码300.js
├── 安卓系统相关参数.js
├── 小米图库查看图片.js
├── 广播电量.js
├── 手机设置.js
├── 打开vpn.js
├── 打开关闭usb网络共享.js
├── 打开无障碍设置界面.js
├── 打开飞行模式设置界面.js
├── 提取广播数据.js
├── 淘宝 内打开网页389.js
└── 语音识别.js
├── jar
├── 二维码识别.js
└── 获取汉字拼音.js
├── module.expo.pdf
├── ocr
└── 本地ocr.js
├── pro商店的脚本
├── UI脚本使用无障碍的最佳实践-1.0.0.1
│ ├── main.js
│ └── project.json
├── Uiobject节点的智能提示(包含文档中没有的api)-1.0.0.1
│ ├── UiNode.js
│ ├── main.js
│ └── project.json
├── ui启动ui-1.0.0.1
│ ├── main.js
│ ├── project.json
│ └── ui.js
├── 一般常用函数模块-1.0.15.1015
│ ├── lib
│ │ └── RootTools-3.4.jar
│ ├── main.js
│ ├── modules
│ │ ├── ex_by_root.js
│ │ └── ex_by_user.js
│ ├── project.json
│ └── readme.txt
├── 二维码自定义生成-1.0.0.1
│ ├── project.json
│ ├── res
│ │ └── logo.png
│ └── 二维码生成.js
├── 亲戚关系计算器-1.0.0.1
│ ├── main.js
│ ├── project.json
│ ├── relationship.js
│ └── res
│ │ └── logo.png
├── 免root启用无障碍-1.0.0.1
│ ├── project.json
│ └── 打开无障碍.js
├── 刮刮卡之佐罗-1.0.0.1
│ ├── main.js
│ └── project.json
├── 图片相交的效果PorterDuffXfermode-1.0.1.2
│ ├── main.js
│ └── project.json
├── 对话框自定义View-1.0.0.1
│ ├── main.js
│ └── project.json
├── 屏幕取色-1.0.0.1
│ ├── main.js
│ └── project.json
├── 属性动画ObjectAnimator-1.0.0.1
│ ├── main.js
│ └── project.json
├── 录屏简单实现-1.0.0.1
│ ├── main.js
│ └── project.json
├── 悬浮按钮-2.0.0-1.2
│ ├── main.js
│ └── project.json
├── 悬浮教程文档-1.0.0.1
│ ├── main.js
│ ├── project.json
│ └── res
│ │ └── logo.png
├── 打手那个枪-1.0.0.1
│ ├── main.js
│ └── project.json
├── 文件选择对话框-1.0.1.2
│ ├── file_chooser.js
│ ├── file_chooser_dialog.js
│ ├── main.js
│ └── project.json
├── 无情的打字机-1.0.0.0
│ ├── main.js
│ └── project.json
├── 更新UI悬浮窗样例-1.0.0.1
│ ├── main.js
│ ├── project.json
│ └── res
│ │ ├── img
│ │ └── download_bg-1.png
│ │ └── js
│ │ ├── download.js
│ │ ├── ui_download.js
│ │ └── window_download.js
├── 画经典分形图案Mandelbrot-1.0.0.1
│ ├── main.js
│ └── project.json
├── 脚本引擎实现顺序执行-1.0.0.1
│ ├── main.js
│ ├── project.json
│ ├── 脚本1.js
│ ├── 脚本2.js
│ └── 脚本3.js
└── 跑马灯-1.0.0.1
│ ├── main.js
│ └── project.json
├── socket
├── ipv6聊天室.js
├── socket.js
└── 斗鱼实时弹幕104.js
├── 养号
├── dy关注粉丝
│ ├── Command.js
│ ├── Page.js
│ ├── appConfig.js
│ ├── commands.js
│ ├── common.js
│ ├── main.js
│ └── 关注三个男粉丝.js
├── 抖音养号.js
└── 抖音点击关注.js
├── 加密
├── AES加解密demo.js
├── Base64_Codec.js
├── RSA.js
├── autojs_AES_CBC加解密_纯英文变量.js
├── autojs和nodejs的AES_CBC加解密Demo
│ ├── autojs_AES_CBC加解密.js
│ └── nodejs_AES_CBC加解密.js
├── base64和des.js
├── md5.js
└── 微信转账说明加密.js
├── 动画
├── (可修改王者荣耀启动动画)视频播放器.js
├── LED倒计时.js
├── PorterDuffXfermode正方形和圆形的结晶.js
├── autojs图标和波浪同时显示.js
├── drawBitMap之平移佐罗.js
├── mesh之扭曲的佐罗.js
├── surface(简单精灵动画)
│ ├── 1122.png
│ └── surface(简单精灵动画).js
├── ui 悬浮窗动画+滑动界面.js
├── 传感器图像.js
├── 刮刮卡之佐罗.js
├── 听歌变色.js
├── 图片相交的效果PorterDuffXfermode.js
├── 属性动画ObjectAnimator例子.js
├── 左右上下正常移动的波浪.js
├── 彩色星空.js
├── 拖尾效果.js
├── 摇摆的丁丁.js
├── 旋转的仁太.js
├── 流畅的流星.js
├── 生僻字大佬的触摸模块.js
├── 画玫瑰.js
├── 立方体动画.js
├── 粉色的仁太.js
├── 自定义canvasButton.js
├── 视觉干扰神器(记忆力增强).js
├── 跑马灯1377.js
├── 跑马灯首尾衔接无缝隙406.js
├── 迷宫游戏.js
└── 阿基米德螺线.js
├── 图色
└── 滑块-1440.js
├── 坐标
└── 两点之间的坐标.js
├── 坚果云
└── 创建删除下载上传.js
├── 字符串
└── 模板字符串.js
├── 小游戏
├── 坦克大战游戏
│ ├── audio
│ │ ├── attack.mp3
│ │ ├── bulletCrack.mp3
│ │ ├── move.mp3
│ │ ├── playerCrack.mp3
│ │ ├── prop.mp3
│ │ ├── start.mp3
│ │ └── tankCrack.mp3
│ ├── images
│ │ ├── menu.gif
│ │ └── tankAll.gif
│ ├── js
│ │ ├── Collision.js
│ │ ├── Helper.js
│ │ ├── bullet.js
│ │ ├── const.js
│ │ ├── crackAnimation.js
│ │ ├── jquery.min.js
│ │ ├── keyboard.js
│ │ ├── level.js
│ │ ├── main.js
│ │ ├── map.js
│ │ ├── menu.js
│ │ ├── num.js
│ │ ├── prop.js
│ │ ├── stage.js
│ │ └── tank.js
│ └── 坦克大战.js
├── 挑战巅峰.js
└── 挑战巅峰测试器.js
├── 工具箱
├── 1删除重写@data@data@com.aaa.bbb226.js
├── 1安装指定目录下的app1224.js
├── 1获取当前app名字122.js
├── AJ_api_search.js
├── AJ功能搜索127.js
├── activity.js
├── autojs查找类.js
├── base64和des.js
├── cookie.js
├── des加密438.js
├── digit152.js
├── flash112.js
├── gps时间获取239.js
├── java代码改成autojs过程.js
├── module_md5203.js
├── music110.js
├── orc文字识别.js
├── shell启动脚本.js
├── shell开关飞行模式135.js
├── testTouch171.js
├── tts3269.js
├── web拦截修改359.js
├── wifi设置代理未完成.js257.js
├── 一个倍数一个图片208.js
├── 一个字一个字输入
├── 二维码
│ ├── 二维码识别.dex
│ └── 图片二维码识别.js
├── 二维码识别186.js
├── 二维码识别_白酒煮饭.js
├── 停止给定名字脚本StopEngine161.js
├── 停止除了自身的脚本250.js
├── 分享文件到QQ.js
├── 删除行.js
├── 判断公共字符串234.js
├── 单例模式.js
├── 双击返回退出的ui266.js
├── 取随机姓名.js
├── 启动github下载的脚本.js
├── 图片转灰度188.js
├── 填写资料106.js
├── 复制文件和文件夹179.js
├── 多功能工具箱292.js
├── 多进程共享数据接收数据.js
├── 定位.js
├── 实心158.js
├── 实时显示脚本运行时长214.js
├── 密码加密241.js
├── 密码生成器304.js
├── 小米锁屏解锁密码8888136.js
├── 庄园排球395.js
├── 当前activitys1173.js
├── 彩色马冬梅.js
├── 微信搜索框输入消息291.js
├── 微信朋友圈分享256.js
├── 微信直接跳转扫一扫243.js
├── 截图_增加打开指针.js
├── 截图_增加打开指针195.js
├── 截图取色.js
├── 手机号码归属地查询238.js
├── 找透明图方法.js
├── 把富宝余额转账到最近下面的第一个yhk里319.js
├── 抓取logcat日志453.js
├── 挑战巅峰测试器104.js
├── 控件布局层次动态2393.js
├── 控件驱动行为215.js
├── 控制app联网134.js
├── 提取广播数据126.js
├── 支付宝收能量380.js
├── 支付宝蚂蚁庄园登山赛228.js
├── 改变toast位置120.js
├── 数组填充.js
├── 文字翻译UI346.js
├── 文字转语音3180.js
├── 无障碍测试.js
├── 显示控件位置174.js
├── 最大公约数.js
├── 本地时间及网络时间验证改版.js
├── 格式化时间262.js
├── 模板字符串408.js
├── 生成随机字符串待解密107.js
├── 用shell操作sqlite数据库331.js
├── 监听一次toast.js
├── 移动bilibili缓存视频到SD卡.js
├── 繁简转换
│ ├── complex.txt
│ ├── simple.txt
│ └── 繁简转换.js
├── 线段上的所有点.js
├── 结束autojs自己.js
├── 编辑距离py2js318.js
├── 网易云音乐相关api.js
├── 脚本引擎实现顺序执行
│ ├── advancedEngines.js
│ ├── main.js
│ ├── project.json
│ ├── 脚本1.js
│ ├── 脚本2.js
│ └── 脚本3.js
├── 脚本排队
│ ├── 1.js
│ ├── 2.js
│ ├── 3.js
│ └── 排队运行脚本.js
├── 脚本排队模块155.js
├── 脚本排队第二种
│ ├── 1.js
│ ├── 2.js
│ ├── 3.js
│ └── main.js
├── 脚本通信
│ ├── ScriptEngine_emit通信
│ │ ├── 1.js
│ │ └── 2.js
│ ├── broadcast通信
│ │ ├── 先监听.js
│ │ └── 后发送.js
│ ├── engines通信
│ │ ├── 1.js
│ │ └── 2.js
│ └── 脚本结束事件.js
├── 自动回复(双击版)316.js
├── 获取对象属性.js
├── 获取汉字拼音250.js
├── 获取页面所有文字143.js
├── 获取首字母中英文249.js
├── 观察者模式216.js
├── 读写@data目录文件379.js
├── 调整手机音量402.js
├── 贝塞尔曲线369.js
├── 输入微/信支/付密码206.js
├── 返回当前页面的所有文字列表111.js
├── 远程控制手机控制端328.js
├── 连接wifi.js
├── 通知便签418.js
├── 随机滑动433.js
├── 随机评论.js
├── 音频制作(wav文件生成) (1).js
├── 预言家题库收集293.js
├── 飞行模式.js
├── 马冬梅.js
└── 高德地图经纬度求实际距离240.js
├── 广播
├── 发射广播362.js
├── 广播发出文件251.js
├── 广播电量 1.0217.js
├── 打印广播Intent信息232.js
└── 网络广播324.js
├── 微信
└── root打开朋友圈.js
├── 悬浮窗
├── 1比1比4悬浮窗.js
├── 1比1比4悬浮窗可限制显示行数151.js
├── UI和悬浮窗一起使用的完整栗子
│ ├── main.js
│ ├── view点击事件.js
│ ├── window在屏幕之内.js
│ ├── 多线程控制悬浮窗.js
│ ├── 小红点悬浮球.js
│ ├── 带属性的悬浮窗.js
│ ├── 悬控移动和点击.js
│ ├── 悬浮窗输入框.js
│ ├── 接码窗口.js
│ ├── 控制台.js
│ ├── 浏览器窗口.js
│ ├── 滑动效果.js
│ └── 移动悬浮窗.js
├── autojs悬浮按钮.js
├── autojs悬浮按钮2.js
├── flash.js
├── qq模仿歪果仁语调.js
├── qq画涂鸦.js
├── uc答题140.js
├── ui悬浮窗动画和滑动界面.js
├── 任性弹窗.js
├── 区域截图.js
├── 取色.js
├── 取色器114.js
├── 坐标点击器.js
├── 坐标颜色显示器391.js
├── 对话框.js
├── 小白点.js
├── 屏幕边缘画了一个圆角的矩形.js
├── 展示图片.js
├── 彩色马冬梅.js
├── 悬浮单任务计时器115.js
├── 悬浮悬对话框菜单.js
├── 悬浮控282.js
├── 悬浮时间268.js
├── 悬浮框自增按钮.js
├── 悬浮画布
├── 悬浮画布.js
├── 悬浮知识点.js
├── 悬浮窗下拉框.js
├── 悬浮窗仿抽屉栏菜单效果.js
├── 悬浮窗动态添加控件.js
├── 悬浮窗动态添加控件177.js
├── 悬浮窗单位px.js
├── 悬浮窗和UI一起使用的例子
│ ├── main.js
│ ├── view点击事件.js
│ ├── window在屏幕之内.js
│ ├── 多线程控制悬浮窗.js
│ ├── 小红点悬浮球.js
│ ├── 带属性的悬浮窗.js
│ ├── 悬控移动和点击.js
│ ├── 接码窗口.js
│ ├── 控制台.js
│ ├── 浏览器窗口.js
│ ├── 滑动效果.js
│ └── 移动悬浮窗.js
├── 悬浮窗属性.js
├── 悬浮窗左边计时右边按钮100.js
├── 悬浮窗控制运行代码.js
├── 悬浮窗日志-限制行数和长度374.js
├── 悬浮窗日志.js
├── 悬浮窗脚本列表.js173.js
├── 悬浮窗计数器172.js
├── 悬浮窗运行代码及移动控制1109.js
├── 悬浮窗隐藏控件.js
├── 截图_增加打开指针.js
├── 截图搜题.js
├── 截图脚本.js
├── 找图数据生成.js
├── 按钮平分.js
├── 显示指定控件信息
├── 显示指定控件信息2.js
├── 模仿抽屉第二版378.js
├── 模拟鼠标332.js
├── 炫酷流量网速悬浮窗.js
├── 焦点.js
├── 移动点击器.js
├── 答题.js
└── 选图涂鸦线条.js
├── 感应器
└── 声动1388.js
├── 手势
├── gestures动作数据生成.js
├── testTouch.js
├── 仿真随机滑动.js
├── 免root动作录制.js
├── 小米锁屏解锁.js
├── 心形手势.js
├── 手指动作录制.js
├── 贝赛尔曲线.js
└── 随机滑动.js
├── 手机
├── callPhone.js
├── notification1247.js
├── 光能手电筒.js
├── 全部短信获取144.js
├── 删除所有联系人.js
├── 判断屏幕是否锁定.js
├── 发短信2.js
├── 发送通知2451.js
├── 开发者选项-指针位置116.js
├── 开发者选项指针位置.js
├── 录音播放
├── 播放系统提示音.js
├── 文字转语音.js
├── 无限震动.js
├── 查看wifi状态.js
├── 横竖屏.js
├── 添加联系人.js
├── 直接打开开发者模式.js
├── 相机拍照.js
├── 花500买的_联系人_短信_日历_通话记录
│ ├── 日历提醒
│ │ └── 日历添加日程.js
│ ├── 短信
│ │ ├── 发短信.js
│ │ ├── 收短信.js
│ │ └── 读短信.js
│ ├── 通讯录增删改查
│ │ ├── 读取通讯录.js
│ │ └── 通讯录添加联系人.js
│ └── 通话记录
│ │ ├── 插入通话记录.js
│ │ └── 通信记录.js
├── 获取wifi信息.js
├── 获取手机桌面壁纸.js
├── 获取最近创建的媒体文件121.js
├── 获取设备信息和非系统app列表.js
├── 获取通讯录.js
├── 蓝牙接收信息获取.js
├── 调整屏幕亮度.js
├── 通知栏.js
├── 通知栏2.js
├── 通知栏3.js
├── 铃声.js
└── 高级输入法.js
├── 接码
├── 易码获取手机号码224.js
├── 火云接码1155.js
├── 短租.js
└── 联众.js
├── 数据库
├── 数据库操作.js
└── 数据库的一些命令.js
├── 数组
├── 1求交集222.js
├── 大数组包含小数组.js
├── 数组映射排序.js
└── 随机打乱数组顺序329.js
├── 文件
├── 复制文件和文件夹.js
├── 获取最近创建的媒体文件.js
└── 读写data目录.js
├── 时间
└── 实时显示脚本运行时长.js
├── 显示消息
└── 改变toast位置.js
├── 牙叔教程q群.png
├── 牙叔教程公众号.jpg
├── 电脑知识点
└── win7结束任务.txt
├── 白酒煮饭
├── 1gps码表.js
├── 2018年刑侦科推理题.js
├── 2048全自动.js
├── 2048游戏机UI版.js
├── 24计算器.js
├── AJ功能搜索.js
├── Auto.js悬浮知识点.js
├── Auto.js教程浏览器.js
├── Autojs悬浮按钮.js
├── BASE64加解密.js
├── IP地址查询.js
├── Intent生成器v 0.3.js
├── QQ_微信_自定义小尾巴.js
├── QQ加好友.js
├── QQ加群成员脚本.js
├── QQ名片点赞脚本.js
├── QQ清除好友聊天字体.js
├── QQ福城辅助线.js
├── QQ空间快速批量浏览.js
├── QQ空间点赞.js
├── QQ群撤回信息.js
├── QQ聊天机器人.js
├── QQ自动回赞_简易版.js
├── QQ,微信聊天辅助脚本(文本分割填充字符) v2.js
├── UI练习文字小游戏m.js
├── [Http代理] 讯代理 动态转发 示例.js
├── [Http代理] 讯代理_优质代理.js
├── [QQ] 为指定好用发送固定金额的红包..js
├── [刷脸打卡]快速进入钉钉打卡界面.js
├── [原创]__密码生成器--百度应用移植版.js
├── [外挂] 链派航海 宝箱透视.js
├── [微信小程序]加减大师辅助_渣渣版.js
├── [挖矿脚本] 链派自动回收出海_需要root权限.js
├── [此项目已废] HAHA小视频自动刷趣币 [一天就搞一块五,不够电费].js
├── [系统Intent]_系统设置页面的相关intent跳转.js
├── [网络]_获取内外网IP地址.js
├── [网赚脚本]遍地红包脱机脚本.js
├── [需Root权限] 手机安全系列之_别动我手机.js_.js
├── app启动停止和输入.js
├── autojs常用函数.js
├── fab控件.js
├── gps时间获取.js
├── mp3音频合并.js
├── qq自定义分享.js
├── toast代替.js
├── 一笔画.js
├── 三合一登入注册界面.js
├── 下载王者全英雄皮肤海报图.js
├── 世上最无聊的脚本.js
├── 为指定好友点赞.js
├── 九九乘法表.js
├── 任意扭转图片.js
├── 传感器图像2.js
├── 使用命令删除图片后,更新图库缓存.js
├── 俄罗斯方块.js
├── 像素绘画.js
├── 光能手电筒.js
├── 免root免无障碍画圆.js
├── 免root免无障碍画球.js
├── 免费时间API.js
├── 全局半透明背景.js
├── 分享多个文件.js
├── 删除空白文件.js
├── 刷会撩更会聊QQ勋章.js
├── 剪贴板翻译.js
├── 包名查看器.js
├── 单词答题4级.js
├── 单词答题6级.js
├── 压缩打包文件夹.js
├── 双击返回退出的ui.js
├── 发送_小尾巴.js
├── 发送通知.js
├── 取关全部公众号.js
├── 取色_多点.js
├── 只同时运行一个脚本.js
├── 可以做头像的表.js.js
├── 号码归属地查询.js
├── 同时请求多个URL.js
├── 名人游记页面.js
├── 图片仔细观察器bt.js
├── 图片放大旋转观察器.js
├── 基于rhino开发的网易云音乐播放器.js
├── 好友列表名片点赞(不完美).js
├── 好友列表点赞.js
├── 对话框更新示例.js
├── 小猿搜题-脑力24点(半自动).js
├── 带进度条的文件更新.js
├── 快手小游戏_拯救萌宠脚本_自动版.js
├── 快手消砖块.js
├── 悬浮单任务计时器.js
├── 悬浮窗仿抽屉栏菜单效果.js
├── 悬浮窗颜色渐变.js
├── 悬浮音乐播放器.js
├── 成语词典.js
├── 截图查看.js
├── 截图水印.js
├── 打印当前页面 所有的 文字 和描.js
├── 拨号盘.js
├── 拼图.js
├── 搜狗图床.js
├── 搬运脚本]JAVA改AutoJS_TCP服务端与客户端的通讯示例【客户端】.js
├── 搬运脚本]JAVA改AutoJS_TCP服务端与客户端的通讯示例【服务端】.js
├── 支付宝帐单自动清理.js
├── 支付宝部分小程序的intent.js
├── 改变字体颜色.js
├── 数独算法.js
├── 文件夹深度搜索.js
├── 文字翻译.js
├── 文本搜索高亮.js
├── 日期➕周数.js
├── 日期农历时间显示.js
├── 时钟球球动画.js
├── 时间截转换小工具.js
├── 星星球.js
├── 最新妹子图爬图(1).js
├── 朋友圈点赞.js
├── 机械毫秒表.js
├── 查看wifi状态.js
├── 查询本机IP地理位置.js
├── 格式化时间.js
├── 检测网络是否可用.js
├── 模拟更新应用.js
├── 模拟鼠标操作网页.js
├── 横竖屏监听.js
├── 欢迎页.js
├── 正则表达式学习.js
├── 每日一句(英文励志).js
├── 消消乐通用版.js.js
├── 爬ip和地区.js
├── 登山.js
├── 登山赛.js
├── 百度人脸识别.js
├── 百度文字识别(自动获取token).js
├── 百度翻译[中转英].js
├── 相机(拍照)↘.js
├── 精选图片2.js
├── 系统设置界面.js
├── 经典分形图案Mandelbrot.js
├── 网易云热评.js
├── 网易云音乐连接转换.js
├── 网易歌曲&歌单下载.js
├── 网络(广播).js
├── 网络监视器悬浮窗.js
├── 网页翻译.js
├── 翻译模块.js
├── 脚本助手.js
├── 脚本打包器.js
├── 脚本管理.js
├── 自动加QQ好友.js
├── 自动加群.js
├── 自动连接电脑vscode.js
├── 薅羊毛线报.js
├── 计算天数并朗读.js
├── 调用扫一扫.js
├── 调色板_new.js
├── 身份证查询.js
├── 输入微/信支/付密码.js
├── 进制计算.js
├── 通知便签.js
├── 遍历群成员.js
├── 音乐播放器.js
├── 音悦台超清mv视频地址解析.js
└── 高仿在线AES加解密.js
├── 百度网盘
├── 百度网盘bsd获取199.js
└── 百度网盘模块294.js
├── 第三方API接口
├── 百度AI开放平台人脸检测102.js
├── 百度ocr图片文字识别253.js
├── 百度文字识别140.js
├── 语音api131.js
├── 语音识别177.js
└── 配音阁文字转语音.js
├── 获取手机粘贴板.js
└── 调用java
└── imgSize.js
/111111111柴房/2222222.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | );
14 | threads.start(function() {
15 | var str="";
16 | //遍历ui.h对象
17 | for (var i in ui.h) {
18 | //打印对象值
19 | str+=i+" ";
20 | }
21 | ui.data.setText(str);
22 | });
23 | ui.bt.click(() => {
24 | if (ui.bt.getText() == "隐藏") {
25 | ui.bt.setText("显示");
26 | ui.h.visibility = 8;
27 | toast("内容已隐藏!");
28 | } else {
29 | ui.bt.setText("隐藏");
30 | ui.h.visibility = 0;
31 | toast("内容已显示!");
32 | }
33 | });
34 |
--------------------------------------------------------------------------------
/111111111柴房/yeah.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/111111111柴房/yeah.png
--------------------------------------------------------------------------------
/111111111柴房/微信赞赏码.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/111111111柴房/微信赞赏码.png
--------------------------------------------------------------------------------
/111111111柴房/支付宝收款码.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/111111111柴房/支付宝收款码.jpg
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## autojs简介
2 | https://www.yuque.com/yashujs/bfug6u/vce2fh
3 |
4 | ## bilibili
5 |
6 | [牙叔教程](https://space.bilibili.com/26079586)
7 |
8 |
9 | ## 微信公众号 牙叔教程
10 |
11 | 
12 |
13 | ## QQ群
14 |
15 | 747748653
16 |
17 | 
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/UI/1怎样动态增加text标签157.js:
--------------------------------------------------------------------------------
1 | 看视频时长=5
2 | 手机号码=18812345678
3 | 邀请码=666666
4 | 看视频倒计时(看视频时长,手机号码,邀请码)
5 |
6 | function 看视频倒计时(看视频时长,手机号码,邀请码){
7 | var w = floaty.rawWindow(
8 |
9 |
10 | 看视频倒计时{看视频时长}秒
11 | 手机号码{手机号码}
12 | 邀请码{邀请码}
13 |
14 |
15 | );
16 | w.setSize(-1, -1);
17 | w.setTouchable(false);
18 | var p=看视频时长
19 | while(1){
20 | ui.run(function(){
21 | w.text.setText("看视频倒计时"+String(p)+"秒")
22 | })
23 | log("看视频倒计时"+String(p)+"秒")
24 | sleep(1000)
25 |
26 | if(p==1){
27 | break;
28 | }
29 | p=p-1
30 | }
31 | w.close();
32 | return true
33 | }
34 |
--------------------------------------------------------------------------------
/UI/1改变字体大小和内容148.js:
--------------------------------------------------------------------------------
1 |
2 | function 看视频倒计时(看视频时长,手机号码,邀请码){
3 | var w = floaty.rawWindow(
4 |
5 |
6 | 看视频倒计时{看视频时长}秒
7 | {手机号码}
8 | {邀请码}
9 |
10 |
11 | );
12 | w.setSize(-1, -1);
13 | w.setTouchable(false);
14 | var p=看视频时长
15 | var 字体大小=66
16 | while(1){
17 | ui.run(function(){
18 | w.text.setText("看视频倒计时"+String(字体大小)+"秒")
19 | // w.text.setText("看视频倒计时"+String(p)+"秒")
20 | })
21 | ui.run(function(){
22 | w.text.setTextSize(字体大小)
23 | })
24 | log("看视频倒计时"+String(p)+"秒")
25 | sleep(1000)
26 | if(p==1){
27 | break;
28 | }
29 | p=p-1;
30 | 字体大小=字体大小-5;
31 | }
32 | sleep(2000)
33 | w.close();
34 | return true
35 | }
36 | 看视频时长=10
37 | 手机号码=123123123
38 | 邀请码=88888
39 | 看视频倒计时(看视频时长,手机号码,邀请码)
40 |
--------------------------------------------------------------------------------
/UI/Switch控件242.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 | );
8 |
9 | ui.cb1.on("check", (checked) => {
10 | toastLog(checked);
11 | if (checked== false) {//这里autojs测试版7好像有问题只能这么写
12 | toastLog(1);
13 | } else {
14 | toastLog(0);
15 | }
16 | });
17 |
18 | ui.cb2.on("click", () => {
19 | toastLog("我被点啦");
20 | if (ui.cb1.isChecked() == false) {
21 | ui.cb1.setChecked(true);
22 | } else {
23 | ui.cb1.setChecked(false);
24 | }
25 | });
26 |
--------------------------------------------------------------------------------
/UI/UI和悬浮窗一起使用的完整栗子/main.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: 悬浮窗和ui一起使用的例子
5 | */
6 |
7 | "ui";
8 | require('./浏览器窗口.js')
9 | threads.start(
10 | function(){
11 | require('./小红点悬浮球.js')
12 | }
13 | )
14 |
15 |
--------------------------------------------------------------------------------
/UI/UI和悬浮窗一起使用的完整栗子/view点击事件.js:
--------------------------------------------------------------------------------
1 | var 悬控移动和点击=require('./悬控移动和点击.js')
2 | function View点击事件(window,viewName,view,clickAction){
3 | this.window=window
4 | this.name=viewName
5 | this.view=view
6 | var 默认点击动作=()=>{
7 | toast(this.name+'被点了')
8 | }
9 | this.clickAction = 默认点击动作
10 | if(clickAction){
11 | this.clickAction = clickAction
12 | 悬控移动和点击(window,viewName,view,clickAction)
13 | }
14 | }
15 | View点击事件.prototype.setClickAction=function(clickAction){
16 | this.clickAction=function (){
17 | 悬控移动和点击(window,viewName,view,clickAction)
18 | }
19 | }
20 |
21 | module.exports=View点击事件
22 |
--------------------------------------------------------------------------------
/UI/UI和悬浮窗一起使用的完整栗子/window在屏幕之内.js:
--------------------------------------------------------------------------------
1 | function window在屏幕之内(window){
2 | var x=window.getX()
3 | var y=window.getY()
4 | var w=window.getWidth()
5 | var h=window.getHeight()
6 | var centerX=x+w/2
7 | var centerY=y+h/2
8 | if(centerX>0 && centerX0 && centerY 2000) {
29 | log('控制台在%sms之内没有加载出来', spendTime)
30 | alert('控制台在%sms之内没有加载出来', spendTime)
31 | exit()
32 | }
33 | }
34 | }
35 | )
36 |
37 | }
38 |
39 |
40 |
41 | var 多线程控制悬浮窗={}
42 | 多线程控制悬浮窗.隐藏或显示=多线程控制悬浮窗隐藏或显示
43 | module.exports=多线程控制悬浮窗
44 |
--------------------------------------------------------------------------------
/UI/UI和悬浮窗一起使用的完整栗子/带属性的悬浮窗.js:
--------------------------------------------------------------------------------
1 | var View点击事件=require('./View点击事件.js')
2 |
3 | function 带属性的悬浮窗(windowName,window){
4 | this.name=windowName
5 | this.window=window
6 | }
7 | 带属性的悬浮窗.prototype.setViewClickAction=function(viewName,view,clickAction){
8 | log("带属性的悬浮窗.prototype.setViewClickAction=function(viewName,view,clickAction){")
9 | log(viewName)
10 | log(view)
11 | log(clickAction)
12 | var window=this.window
13 | var 添加了点击事件的view=new View点击事件(window,viewName,view,clickAction)
14 | log('setViewClickAction已设置-->'+viewName)
15 | return viewName
16 | }
17 |
18 | module.exports=带属性的悬浮窗
19 |
--------------------------------------------------------------------------------
/UI/UI和悬浮窗一起使用的完整栗子/悬浮窗输入框.js:
--------------------------------------------------------------------------------
1 | var window = floaty.window(
2 |
3 |
4 |
5 |
6 | );
7 |
8 | window.exitOnClose();
9 |
10 | toast("长按确定键可调整位置");
11 |
12 | window.input.on("key", function(keyCode, event){
13 | log('keyCode=',keyCode)
14 | if(event.getAction() == event.ACTION_DOWN && keyCode == keys.back){
15 | window.disableFocus();
16 | event.consumed = true;
17 | }
18 | });
19 |
20 | window.input.on("touch_down", ()=>{
21 | window.requestFocus();
22 | window.input.requestFocus();
23 | });
24 |
25 | window.ok.on("click", ()=>{
26 | toast("傻瓜! " + window.input.text());
27 | window.disableFocus();
28 | });
29 |
30 | window.ok.on("long_click", ()=>{
31 | window.setAdjustEnabled(!window.isAdjustEnabled());
32 | });
33 |
34 | setInterval(()=>{}, 1000);
35 |
--------------------------------------------------------------------------------
/UI/UI控件隐藏.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
6 | 生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒
7 |
8 |
9 |
10 | )
11 | var view = ui.main
12 | function scrollX(view, x) {
13 | view.scrollTo(x, 0)
14 | }
15 | var num = function () {
16 | var count = 0
17 | return function () {
18 | return count++;
19 | }
20 | }()
21 | var intervalId;
22 | var fn = () => {
23 | var n=num()
24 | scrollX(view, n)
25 | var width=view.getWidth()
26 | if(n>width/3*2){
27 | clearInterval(intervalId)
28 | }
29 | }
30 | setTimeout(() => {
31 | intervalId=setInterval(
32 | fn, 3
33 | )
34 | }, 1000);
35 |
36 |
--------------------------------------------------------------------------------
/UI/WebView多页面浏览.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | ui.layout(
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | );
15 |
16 | var webs = [];
17 | var urls = ["https://baidu.com", "https://m.mi.com", "https://m.weibo.com", "https://meizu.com"];
18 |
19 | var num = 0;
20 | urls.forEach(e => {
21 | webs.push(ui.inflate(
22 | ));
23 | webs[num++].loadUrl(e);
24 | })
25 |
26 |
27 | ui.webs.addView(webs[0]);
28 |
29 | ui.one.click(() => {
30 | ui.webs.removeAllViews();
31 | ui.webs.addView(webs[0]);
32 | })
33 |
34 |
35 | ui.two.click(() => {
36 | ui.webs.removeAllViews();
37 | ui.webs.addView(webs[1]);
38 | });
39 |
40 | ui.three.click(() => {
41 | ui.webs.removeAllViews();
42 | ui.webs.addView(webs[2]);
43 | })
44 |
45 | ui.four.click(() => {
46 | ui.webs.removeAllViews();
47 | ui.webs.addView(webs[3]);
48 | })
49 |
50 | ui.o.click(() => {
51 | webs[1].loadUrl("https://qzone.qq.com");
52 | })
--------------------------------------------------------------------------------
/UI/WebView简单示例安卓调用js428.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | //importClass(android.view.View.OnClickListener);
3 | importClass(java.lang.Runnable);
4 | //importClass(android.os.Build);
5 | //这是一个通过webView控件简单调用js网页代码的示例
6 |
7 | ui.layout(
8 |
9 |
10 |
11 |
12 | );
13 | //importClass(android.webkit.JavascriptInterface);
14 | //importClass(android.webkit.WebViewClient);
15 | webView = ui.findById("webview");
16 |
17 | button = ui.findById("button");
18 | button.setText("确定");
19 | button.setOnClickListener({
20 | onClick: function(v) {
21 | webView.post(new Runnable({
22 | run: function() {
23 | // 调用javascript的callJS()方法
24 | webView.loadUrl("javascript:callJS()");
25 | }
26 | }));
27 | }
28 | });
29 |
30 | html = files.path("./html.html");
31 | webView.loadUrl("file://" + html);
--------------------------------------------------------------------------------
/UI/activity.js:
--------------------------------------------------------------------------------
1 | am = context.getSystemService(context.ACTIVITY_SERVICE);
2 | cn = am.getRunningTasks(1).get(0).topActivity;
3 | // log("current", "pkg:" + cn.getPackageName());
4 | // log("currentclass", "cls:" + cn.getClassName());
5 | var mPackageManager = context.getPackageManager()
6 | // var appList=pm.getInstalledApplications(0)
7 | latestPackageStr=cn.getPackageName()
8 | latestClassStr=cn.getClassName()
9 | componentName = new android.content.ComponentName('org.autojs.autojs', 'org.autojs.autojs.ui.main.MainActivity_')
10 | // mLatestActivity = mPackageManager.getActivityInfo(componentName, 0);
11 | mLatestActivity = mPackageManager.getActivityInfo(componentName, 1);
12 | log(mLatestActivity)
13 |
--------------------------------------------------------------------------------
/UI/activity和context.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | toastLog(activity
3 | .getWindow()
4 | .getDecorView()
5 | .getChildAt(0)
6 | .getChildCount()
7 | )
8 |
9 | 窗口管理器
10 | wManager = context.getSystemService(
11 | context.WINDOW_SERVICE);
12 |
13 | 高级输入法
14 | var window = floaty.window(
15 |
16 | );
17 |
18 | for (var i = 0; i < 50; i++) {
19 | ui.run(() => {
20 | imm = window.text.getContext().getSystemService(context.INPUT_METHOD_SERVICE);
21 | imm.toggleSoftInput(0, android.view.inputmethod.InputMethodManager.SHOW_FORCED);
22 | });
23 | sleep(100);
24 | };
25 |
26 | 调整手机亮度
27 | var w = floaty.rawWindow(
28 |
29 | );
30 | w.setSize(-1, -1);
31 | w.setTouchable(false);
32 | log(w.main.getRootView().getLayoutParams().screenBrightness=0);
33 | setTimeout(()=>{ w.close(); }, 4000);
--------------------------------------------------------------------------------
/UI/list显示脚本文件夹下所有js文件.js:
--------------------------------------------------------------------------------
1 | 'ui';
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 | )
9 | var jsFiles = getJsFile()
10 | var jsFileObjs = []
11 | jsFiles.map(
12 | (fileName) => {
13 | jsFileObjs.push({
14 | fileName: fileName
15 | })
16 | }
17 | )
18 | var listView = ui.jsFiles
19 | listView.setDataSource(jsFileObjs)
20 | listView.on("item_click", function (item, i, itemView, listView) {
21 | var info = itemView.fileName.text()
22 | toastLog(info)
23 | });
24 |
25 | function getJsFile() {
26 | var dir = "/sdcard/脚本/";
27 | var jsFiles = files.listDir(dir, function (name) {
28 | return name.endsWith(".js") && files.isFile(files.join(dir, name));
29 | });
30 | return jsFiles
31 | }
32 |
--------------------------------------------------------------------------------
/UI/list隔行变色.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: list隔行变色
5 | * 感谢: 沐泠,隔行变色,给list添加一个bg属性,判断奇偶就可以了
6 | */
7 | 'ui';
8 | ui.layout(
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | )
19 | var todoList = [{
20 | content: '111111'
21 | },
22 | {
23 | content: '222222'
24 | },
25 | {
26 | content: '33333333'
27 | },
28 | {
29 | content: '444444444'
30 | },
31 | {
32 | content: '555555'
33 | }
34 | ]
35 | for(var i=0;i
4 |
5 |
6 |
7 | );
8 |
9 | ui.cb1.on("check", (checked) => {
10 | toastLog(checked);
11 | if (checked== false) {//这里autojs测试版7好像有问题只能这么写
12 | toastLog(1);
13 | } else {
14 | toastLog(0);
15 | }
16 | });
17 |
18 | ui.cb2.on("click", () => {
19 | toastLog("我被点啦");
20 | if (ui.cb1.isChecked() == false) {
21 | ui.cb1.setChecked(true);
22 | } else {
23 | ui.cb1.setChecked(false);
24 | }
25 | });
26 |
--------------------------------------------------------------------------------
/UI/ui多界面215.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 | 这是第一个界面,点击切换到第二个界面
5 |
6 | )
7 | function 第二个界面(){
8 | ui.layout(
9 |
10 | 这是第二个界面,点击退出
11 |
12 | )
13 | ui.t1.on("click",()=>{
14 | ui.finish()
15 | })
16 | }
17 | ui.t1.on("click",()=>{
18 | 第二个界面()
19 | })
--------------------------------------------------------------------------------
/UI/ui延时.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 | );
8 | threads.start(
9 | function () {
10 | main()
11 | }
12 | )
13 |
14 | function main() {
15 | for (let i = 0; i < 100; i++) {
16 | ui.run(
17 | () => {
18 | ui.num.setText(util.format('第%d只羊', i))
19 | }
20 | )
21 | sleep(1000)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/UI/ui显示日志.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 | );
8 |
9 | ui.console.setConsole(runtime.console);
10 | // 设置控制台字体颜色
11 | let c = new android.util.SparseArray();
12 | let Log = android.util.Log;
13 | c.put(Log.VERBOSE, new java.lang.Integer(colors.parseColor("#dfc0c0c0")));
14 | c.put(Log.DEBUG, new java.lang.Integer(colors.parseColor("#cc000000")));
15 | c.put(Log.INFO, new java.lang.Integer(colors.parseColor("#ff64dd17")));
16 | c.put(Log.WARN, new java.lang.Integer(colors.parseColor("#ff2962ff")));
17 | c.put(Log.ERROR, new java.lang.Integer(colors.parseColor("#ffd50000")));
18 | c.put(Log.ASSERT, new java.lang.Integer(colors.parseColor("#ffff534e")));
19 | ui.console.setColors(c);
20 |
21 | // 别问我这些API哪来的,能不能完善文档?这些都是Auto.js内部的API,因此不提供文档。如有更改,恕不另行通知。后续可能会提供正式支持。
22 |
23 | setInterval(()=>{
24 | console.log(1);
25 | console.info(2);
26 | }, 500);
27 |
--------------------------------------------------------------------------------
/UI/webViewClient的用法.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 | )
7 | var client = android.webkit.WebViewClient;
8 | var t = new JavaAdapter(client, {
9 | onPageFinished: function (view, url) {
10 | toast("哈哈")
11 | }
12 | })
13 | ui.web.setWebViewClient(t);
14 | ui.web.loadUrl("https://baidu.com")
15 | toastLog(typeof (t));
16 |
--------------------------------------------------------------------------------
/UI/webView填充表单.js:
--------------------------------------------------------------------------------
1 | 'ui';
2 | ui.layout(
3 |
4 |
5 |
6 | )
7 | var settings = ui.a.getSettings()
8 | settings.setJavaScriptEnabled(true);
9 | var url = "https://www.baidu.com/"
10 | ui.a.loadUrl(url);
11 | var 要百度的内容 = '谁是世界上最美的女人'
12 | var 百度搜索框id = 'index-kw'
13 | var js = "javascript:document.getElementById('" + 百度搜索框id + "').value = '" + 要百度的内容 + "';";
14 | var setIntervalId;
15 | setIntervalId = setInterval(() => {
16 | var P = ui.a.getProgress();
17 | log(P)
18 | if (P == 10) {
19 | setTimeout(
20 | function () {
21 | ui.a.evaluateJavascript(js, new android.webkit.ValueCallback(
22 | function onReceiveValue(s) {
23 | log(s)
24 | }
25 | ))
26 | }, 1000
27 | )
28 | }
29 | clearInterval(setIntervalId)
30 | }, 100);
31 |
--------------------------------------------------------------------------------
/UI/webView输入关键词搜索.js:
--------------------------------------------------------------------------------
1 | 'ui';
2 | ui.layout(
3 |
4 |
5 |
6 | )
7 | webView=ui.a
8 | var settings = webView.getSettings()
9 | // settings.setJavaScriptEnabled(true);
10 | settings.setJavaScriptCanOpenWindowsAutomatically(true);
11 | var url = "https://www.baidu.com/"
12 | webView.loadUrl(url);
13 | var 要百度的内容 = '谁是世界上最美的女人'
14 | var 百度搜索输入框id = 'index-kw'
15 | var js = "javascript:document.getElementById('" + 百度搜索输入框id + "').value = '" + 要百度的内容 + "';";
16 | setTimeout(
17 | function () {
18 | ui.a.evaluateJavascript(";"+inputContentThenSearch.toString() + ";inputContentThenSearch();", function(s) {
19 | log(s)
20 | })
21 | }, 1000)
22 | function inputContentThenSearch(){
23 | document.getElementById('index-kw').value='谁是世界上最美的女人'
24 | document.getElementById('index-bn').click()
25 | return '点击了搜索按钮'
26 | }
27 |
--------------------------------------------------------------------------------
/UI/webviewClient的使用方法.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | ui.layout(
4 |
5 |
6 |
7 | )
8 |
9 | var client = android.webkit.WebViewClient;
10 |
11 | var t = new JavaAdapter(client, {
12 | onPageFinished: function(view, url) {
13 | console.log(url)
14 | toast("哈哈")
15 | }
16 | })
17 |
18 |
19 |
20 | ui.web.setWebViewClient(t);
21 |
22 | ui.web.loadUrl("https://baidu.com")
23 |
24 | toastLog(typeof(t));
25 |
--------------------------------------------------------------------------------
/UI/windowFlag.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 | )
7 | ui.but.click(function(){toast('我被点了')})
8 |
9 | activity.getWindow().setFlags(-1, -1) //变黑
10 |
11 | // activity.getWindow().setFlags(16, 16) //无法获取焦点
12 |
13 | // activity.getWindow().setFlags(1024, 1024) //隐藏所有的装饰物(比如状态栏)
14 |
15 | // activity.getWindow().setFlags(8192, 8192) //不允许截屏
16 |
17 | // activity.getWindow().setFlags(524288, 524288) //强制锁屏显示本界面
18 |
--------------------------------------------------------------------------------
/UI/windowManager.js:
--------------------------------------------------------------------------------
1 | importClass(android.widget.Button)
2 | importClass('android.view.WindowManager')
3 | importClass('android.view.Gravity')
4 | importClass('android.graphics.PixelFormat')
5 |
6 | windowManager = context.getSystemService(context.WINDOW_SERVICE);
7 | log(windowManager)
8 | screenWidth = windowManager.getDefaultDisplay().getWidth();
9 | screenHeight = windowManager.getDefaultDisplay().getHeight();
10 | mBallView = new Button(context);
11 | params = new WindowManager.LayoutParams();
12 | params.x = screenWidth;
13 | params.y = screenHeight / 2;
14 | params.width = WindowManager.LayoutParams.WRAP_CONTENT;
15 | params.height = WindowManager.LayoutParams.WRAP_CONTENT;
16 | params.gravity = Gravity.LEFT | Gravity.TOP;
17 | params.type = WindowManager.LayoutParams.TYPE_PHONE;
18 | params.format = PixelFormat.RGBA_8888;
19 | params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
20 | mBallView.setLayoutParams(params);
21 | mBallView.setTextSize(20);
22 | mBallView.setTextColor(colors.parseColor("#ff00f0"))
23 | mBallView.setText("大护法");
24 | mBallView.setGravity(0); //左护法
25 | windowManager.addView(mBallView, params);
26 |
--------------------------------------------------------------------------------
/UI/一开始不要显示输入法.js:
--------------------------------------------------------------------------------
1 | activity.getWindow().setSoftInputMode(android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
2 |
--------------------------------------------------------------------------------
/UI/保存imgView加载的图片.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: 保存imgView加载的图片
5 | */
6 | 'ui';
7 | ui.layout(
8 |
9 |
10 |
11 |
12 |
13 | )
14 | ui.post(
15 | function () {
16 | var imgView=ui.img
17 | var myBitmap=createBitmap(imgView)
18 | var imgPath=saveBitmap(myBitmap)
19 | log(imgPath)
20 | }, 1000
21 | )
22 | function createBitmap(view) {
23 | view.setDrawingCacheEnabled(true);
24 | view.buildDrawingCache();
25 | var bitmap = view.getDrawingCache();
26 | return bitmap;
27 | }
28 | function saveBitmap(bitmap) {
29 | var imgPath="/sdcard/1.png"
30 | var canvas = new Canvas(bitmap);
31 | var myimg = canvas.toImage();
32 | log('myimg=')
33 | log(myimg)
34 | images.save(myimg, imgPath );
35 | app.viewFile(imgPath);
36 | return imgPath
37 | }
38 |
--------------------------------------------------------------------------------
/UI/全局半透明背景1192.js:
--------------------------------------------------------------------------------
1 | var w = floaty.rawWindow(
2 |
3 |
4 |
5 | );
6 |
7 | w.setTouchable(false);
8 |
9 | setTimeout(()=>{
10 | w.close();
11 | }, 360000);
12 | //720*1280分辨率显示正常
--------------------------------------------------------------------------------
/UI/全屏显示背景图191.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | var url="http://smimg5.mingxing.com.cpgzh.com/upload/pic/smpic/20160913/20160913170456_89448.jpg";
4 | //引用安卓类
5 | importClass(android.view.WindowManager);
6 | //全屏显示
7 | activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
8 | ui.layout(
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/UI/动态显示隐藏布局156.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | );
14 | threads.start(function() {
15 | var str="";
16 | //遍历ui.h对象
17 | for (var i in ui.h) {
18 | //打印对象值
19 | str+=i+" ";
20 | }
21 | ui.data.setText(str);
22 | });
23 | ui.bt.click(() => {
24 | if (ui.bt.getText() == "隐藏") {
25 | ui.bt.setText("显示");
26 | ui.h.visibility = 8;
27 | toast("内容已隐藏!");
28 | } else {
29 | ui.bt.setText("隐藏");
30 | ui.h.visibility = 0;
31 | toast("内容已显示!");
32 | }
33 | });
--------------------------------------------------------------------------------
/UI/双击返回退出的ui.js:
--------------------------------------------------------------------------------
1 |
2 | "ui";
3 | ui.layout(
4 |
5 |
6 |
7 | );
8 | var isCanFinish = false;
9 | var isCanFinishTimeout;
10 | ui.emitter.on("back_pressed", e => {
11 | if (!isCanFinish) {
12 | isCanFinish = true;
13 | isCanFinishTimeout=setTimeout(() => {
14 | toastLog("双击退出");
15 | isCanFinish = false;
16 | }, 400);
17 | e.consumed = true;
18 | } else {
19 | clearTimeout(isCanFinishTimeout);
20 | e.consumed = false;
21 | };
22 | });
23 |
--------------------------------------------------------------------------------
/UI/图片圆角.js:
--------------------------------------------------------------------------------
1 | w=floaty.window(
2 |
3 | )
4 | w.图片.click(function () {
5 | w.图片.attr("w", "100"); //图片显示不正常
6 | w.图片.attr("cornerRadius", "30"); //没反应
7 | w.图片.invalidate()
8 | });
9 | setInterval(
10 | () => {}, 1000
11 | )
12 |
--------------------------------------------------------------------------------
/UI/在ui中使用悬浮窗demo.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: 在ui中使用悬浮窗demo
5 | */
6 | 'ui';
7 | ui.layout(
8 |
9 |
10 |
11 |
12 | )
13 | var w;
14 | ui.show.on('click',function(){
15 | toastLog('show')
16 | if(w){
17 | w.setSize(666,666)
18 | }else{
19 | threads.start(
20 | function(){
21 | w = floaty.rawWindow(
22 |
23 | 悬浮文字
24 |
25 | );
26 | w.setSize(666,666)
27 | }
28 | )
29 | }
30 | })
31 | ui.hide.on('click',function(){
32 | toastLog('hide')
33 | w.setSize(1,1)
34 | })
35 | setInterval(
36 | function(){
37 | },1000
38 | )
39 |
--------------------------------------------------------------------------------
/UI/在别的脚本中获取ui的控件属性/ui模块.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 | )
7 | module.exports=ui.myButton
8 |
--------------------------------------------------------------------------------
/UI/在别的脚本中获取ui的控件属性/获取ui模块中按钮的文本.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | var ui的引用=require('./ui模块.js')
3 | log(ui的引用.text())
4 |
--------------------------------------------------------------------------------
/UI/复选框.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 | )
8 | setInterval(
9 | fn,200
10 | )
11 |
12 | function fn(){
13 | if(ui.cb1.isChecked()){
14 | ui.cb1.setText("选了")
15 | }else{
16 | ui.cb1.setText("没选")
17 | }
18 | if(ui.cb2.isChecked()){
19 | ui.cb2.setText("选了")
20 | }else{
21 | ui.cb2.setText("没选")
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/UI/帧布局139.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
7 |
8 |
12 |
16 |
17 |
18 |
22 |
23 |
24 |
28 |
29 |
30 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 |
--------------------------------------------------------------------------------
/UI/循环缩放webView.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 | )
8 | ui.web.loadUrl('https://www.baidu.com')
9 | var mode = [{
10 | w: 100,
11 | h: 150
12 | },
13 | {
14 | w: 300,
15 | h: 450
16 | },
17 | {
18 | w: device.width+"px",
19 | h: device.height+"px"
20 | },
21 | {
22 | w: 900,
23 | h: 1350
24 | }
25 | ]
26 | var num = function () {
27 | var current = 0
28 | return function () {
29 | if (current > mode.length - 1) {
30 | current = 0
31 | }
32 | return current++
33 | }
34 | }()
35 | ui.zoom.click(
36 | function () {
37 | var currentNum = num()
38 | var currentMode = mode[currentNum]
39 | log('currentNum=', currentNum)
40 | ui.run(
41 | function () {
42 | ui.web.attr("width", currentMode.w)
43 | ui.web.attr("height", currentMode.h)
44 | }
45 | )
46 | }
47 | )
48 |
--------------------------------------------------------------------------------
/UI/悬浮窗和UI一起使用的例子/main.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: 悬浮窗和ui一起使用的例子
5 | */
6 |
7 | "ui";
8 | require('./浏览器窗口.js')
9 | threads.start(
10 | function(){
11 | require('./小红点悬浮球.js')
12 | }
13 | )
14 |
15 |
--------------------------------------------------------------------------------
/UI/悬浮窗和UI一起使用的例子/view点击事件.js:
--------------------------------------------------------------------------------
1 | var 悬控移动和点击=require('./悬控移动和点击.js')
2 | function View点击事件(window,viewName,view,clickAction){
3 | this.window=window
4 | this.name=viewName
5 | this.view=view
6 | var 默认点击动作=()=>{
7 | toast(this.name+'被点了')
8 | }
9 | this.clickAction = 默认点击动作
10 | if(clickAction){
11 | this.clickAction = clickAction
12 | 悬控移动和点击(window,viewName,view,clickAction)
13 | }
14 | }
15 | View点击事件.prototype.setClickAction=function(clickAction){
16 | this.clickAction=function (){
17 | 悬控移动和点击(window,viewName,view,clickAction)
18 | }
19 | }
20 |
21 | module.exports=View点击事件
22 |
--------------------------------------------------------------------------------
/UI/悬浮窗和UI一起使用的例子/window在屏幕之内.js:
--------------------------------------------------------------------------------
1 | function window在屏幕之内(window){
2 | var x=window.getX()
3 | var y=window.getY()
4 | var w=window.getWidth()
5 | var h=window.getHeight()
6 | var centerX=x+w/2
7 | var centerY=y+h/2
8 | if(centerX>0 && centerX0 && centerY 2000) {
29 | log('控制台在%sms之内没有加载出来', spendTime)
30 | alert('控制台在%sms之内没有加载出来', spendTime)
31 | exit()
32 | }
33 | }
34 | }
35 | )
36 |
37 | }
38 |
39 |
40 |
41 | var 多线程控制悬浮窗={}
42 | 多线程控制悬浮窗.隐藏或显示=多线程控制悬浮窗隐藏或显示
43 | module.exports=多线程控制悬浮窗
44 |
--------------------------------------------------------------------------------
/UI/悬浮窗和UI一起使用的例子/带属性的悬浮窗.js:
--------------------------------------------------------------------------------
1 | var View点击事件=require('./View点击事件.js')
2 |
3 | function 带属性的悬浮窗(windowName,window){
4 | this.name=windowName
5 | this.window=window
6 | }
7 | 带属性的悬浮窗.prototype.setViewClickAction=function(viewName,view,clickAction){
8 | log("带属性的悬浮窗.prototype.setViewClickAction=function(viewName,view,clickAction){")
9 | log(viewName)
10 | log(view)
11 | log(clickAction)
12 | var window=this.window
13 | var 添加了点击事件的view=new View点击事件(window,viewName,view,clickAction)
14 | log('setViewClickAction已设置-->'+viewName)
15 | return viewName
16 | }
17 |
18 | module.exports=带属性的悬浮窗
19 |
--------------------------------------------------------------------------------
/UI/手勢模塊/44.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/UI/手勢模塊/44.png
--------------------------------------------------------------------------------
/UI/按钮平分.js:
--------------------------------------------------------------------------------
1 | 'ui';
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 | )
10 |
11 |
--------------------------------------------------------------------------------
/UI/数字键盘.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | ui.layout(
4 |
5 |
6 |
7 |
8 |
9 |
10 | );
11 |
12 | var keyboard = [
13 | "7",
14 | "8",
15 | "9",
16 | "4",
17 | "5",
18 | "6",
19 | "1",
20 | "2",
21 | "3",
22 | "DEL",
23 | "0",
24 | "完成"
25 | ];
26 |
27 |
28 | ui.keyboard.setDataSource(keyboard);
29 |
30 | ui.keyboard.on("item_bind", function(itemView, itemHolder) {
31 | itemView.btn.on("click", function() {
32 | let text = itemHolder.item;
33 | onKeyPressed(text);
34 | });
35 | });
36 |
37 |
38 | function onInputComplete(text){
39 | toastLog(text);
40 | ui.finish();
41 | }
42 |
43 | function onKeyPressed(key) {
44 | if (key == "完成") {
45 | onInputComplete(String(ui.input.getText()));
46 | return;
47 | }
48 | if (key == "DEL") {
49 | var text = ui.input.getText();
50 | if(text.length() > 0){
51 | ui.input.setText(text.substring(0, text.length() - 1));
52 | }
53 | return;
54 | }
55 | ui.input.append(key);
56 | }
57 |
--------------------------------------------------------------------------------
/UI/数字键盘186.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | ui.layout(
4 |
5 |
6 |
7 |
8 |
9 |
10 | );
11 |
12 | var keyboard = [
13 | "7",
14 | "8",
15 | "9",
16 | "4",
17 | "5",
18 | "6",
19 | "1",
20 | "2",
21 | "3",
22 | "DEL",
23 | "0",
24 | "完成"
25 | ];
26 |
27 |
28 | ui.keyboard.setDataSource(keyboard);
29 |
30 | ui.keyboard.on("item_bind", function(itemView, itemHolder) {
31 | itemView.btn.on("click", function() {
32 | let text = itemHolder.item;
33 | onKeyPressed(text);
34 | });
35 | });
36 |
37 |
38 | function onInputComplete(text){
39 | toastLog(text);
40 | ui.finish();
41 | }
42 |
43 | function onKeyPressed(key) {
44 | if (key == "完成") {
45 | onInputComplete(String(ui.input.getText()));
46 | return;
47 | }
48 | if (key == "DEL") {
49 | var text = ui.input.getText();
50 | if(text.length() > 0){
51 | ui.input.setText(text.substring(0, text.length() - 1));
52 | }
53 | return;
54 | }
55 | ui.input.append(key);
56 | }
--------------------------------------------------------------------------------
/UI/显示网页.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | ui.layout(
4 |
5 |
6 |
7 | 在界面加载一个网页
8 |
9 |
10 |
11 |
12 | )
13 |
14 | ui.webview.loadUrl("http://baidu.com/");
15 |
--------------------------------------------------------------------------------
/UI/监听/输入框删除监听.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | importClass(android.text.TextWatcher)
3 | ui.layout(
4 |
5 |
6 |
7 | )
8 | var myTextWatcher = new TextWatcher({
9 | onTextChanged:function(CharSequence, start, before, count) {
10 | toastLog(start)
11 | }
12 | });
13 | ui.input.addTextChangedListener(myTextWatcher)
14 | setTimeout(function(){
15 | ui.input.removeTextChangedListener(myTextWatcher)
16 | toastLog('删掉监听了')
17 | },3000)
18 |
--------------------------------------------------------------------------------
/UI/获取UI界面控件宽度和高度.js:
--------------------------------------------------------------------------------
1 |
2 | 'ui';
3 | var marginSize = '100'
4 | var myMargin = marginSize + ' ' + marginSize + ' ' + marginSize + ' ' + marginSize
5 | ui.layout(
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | )
14 | vto = ui.board.getViewTreeObserver();
15 | var hasMeasured = false;
16 | vto.addOnPreDrawListener(new android.view.ViewTreeObserver.OnPreDrawListener({
17 | onPreDraw: function () {
18 | if (hasMeasured == false) {
19 | // left1 = ui.board.getMeasuredLeft();
20 | height1 = ui.board.getMeasuredHeight();
21 | width1 = ui.board.getMeasuredWidth();
22 | //获取到宽度和高度后,可用于计算
23 | // log("left1::" + left1);
24 | log("height::" + height1);
25 | log("width::" + width1);
26 | hasMeasured = true;
27 | }
28 | return true;
29 | }
30 | }));
31 |
--------------------------------------------------------------------------------
/UI/获取ui界面左上角坐标.js:
--------------------------------------------------------------------------------
1 | 'ui';
2 | var marginSize = '100'
3 | var myMargin = marginSize + ' ' + marginSize + ' ' + marginSize + ' ' + marginSize
4 | ui.layout(
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | )
13 | ui.post(
14 | function () {
15 | var view = ui.board
16 | var rect = new android.graphics.Rect;
17 | view.getBoundsOnScreen(rect)
18 | log(rect.left)
19 | log(rect.top)
20 | log(rect.centerX())
21 | log(rect.centerY())
22 | }
23 | )
24 |
25 |
--------------------------------------------------------------------------------
/UI/表格布局283.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
9 |
10 |
11 |
12 |
16 |
20 |
21 |
22 |
23 |
27 |
32 |
33 |
34 |
35 |
40 |
41 |
42 |
43 |
44 | )
45 |
--------------------------------------------------------------------------------
/UI/设置界面颜色149.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | ui.layout(
4 |
5 | 需一美貌男子,精壮
6 |
7 | );
8 |
9 |
10 | ui.col.click(() => {
11 | startChange();
12 | });
13 |
14 | transparency = 20;
15 | function startChange() {
16 | downloadId = setInterval(() => {
17 | transparency++;
18 | if (transparency > 255) {
19 | clearInterval(downloadId);
20 | return;
21 | }
22 | colnum="#"+(transparency.toString(16))+"0000FF";
23 | log(colnum);
24 | // toast(colnum);
25 |
26 |
27 | ui.col.text(transparency.toString(16));
28 | ui.col.setTextColor(colors.parseColor(colnum))
29 |
30 |
31 | colnum2="#"+(transparency.toString(16))+"FF6633"
32 |
33 | ui.col.setBackgroundColor(colors.parseColor(colnum2));
34 |
35 |
36 | }, 8);
37 | }
38 |
--------------------------------------------------------------------------------
/UI/输入框光标.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: 把光标设置成图片
5 | */
6 | 'ui';
7 | ui.layout(
8 |
9 |
10 |
11 |
12 | )
13 | var view=ui.input
14 | var imgId=getResource('ic_android_eat_js')
15 | view.setCursorDrawableRes(imgId)
16 | function getResource(imageName) {
17 | var resId = context.getResources().getIdentifier(imageName, "drawable", context.getPackageName());
18 | return resId;
19 | }
20 |
--------------------------------------------------------------------------------
/UI/随机颜色.js:
--------------------------------------------------------------------------------
1 | function getRndColor() {
2 | var a, r, g, b;
3 | a = Math.floor(0), r = Math.floor(随机0_255()), g = Math.floor(随机0_255()), b = Math.floor(随机0_255());
4 | // var 反色 = -1 - colors.argb(0, r, g, b);
5 | var color = colors.argb(0, r, g, b);
6 | color = colors.toString(color)
7 | log(color)
8 | return color
9 | }
10 | function 随机0_255() {
11 | var r = parseInt(255 * Math.random())
12 | return r
13 | }
14 |
--------------------------------------------------------------------------------
/app操作/强制更新.js:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * 作者: 家
4 | * QQ: 203118908
5 | * 功能: 强制更新app
6 | */
7 | 'ui';
8 | var dialog = new android.app.AlertDialog.Builder(activity).setTitle("Tips").setMessage("请更新最新版本!")
9 | .setNeutralButton("退出", new android.content.DialogInterface
10 | .OnClickListener({
11 | onClick: (dialog, which) => {
12 | exit()
13 | }
14 | })
15 | ).setNegativeButton("更新", new android.content.DialogInterface
16 | .OnClickListener({
17 | onClick: (dialog, which) => {
18 | toastLog('在这里更新app')
19 | }
20 | })
21 | ).show();
22 | dialog.setCanceledOnTouchOutside(false); //点击dialog其它地方dismiss无效
23 | dialog.setCancelable(false); //点击返回键无效
24 |
--------------------------------------------------------------------------------
/app操作/我经常用的shell命令.txt:
--------------------------------------------------------------------------------
1 | 标题: 我经常用的shell命令
2 | 作者: 小曲奇
3 |
4 | ①
5 | 点击 input tap X Y
6 | 长按250ms input swipe X1 Y1 X1 Y1 250
7 | 划屏250ms input swipe X1 Y1 X2 Y2 250
8 | 输入文本 input text 文本
9 |
10 | ②
11 | 安装apk pm install
12 | 卸载apk pm uninstall <包名>
13 | 隐藏应用pm hide <包名>
14 | 显示应用pm unhide <包名>
15 | 停止应用 am force-stop 包名
16 |
17 | ③
18 | am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)
19 | (这个是可玩性最强的,可以设置在打开应用时运行该命令来达到跳广告,其他还有很多,我也正在研究中)
20 | 跳广告例子:打开优酷时触发(当然也可以用活动触发,但是得找到这个活动)
21 | am start -n com.youku.phone/com.youku.phone.com.youku.HomePageEntry
22 | 就可以跳广告
23 | 注:应用包名可以用 【酷安】 的应用管理找或者用其他的都可以
24 | 活动名称可以用 【开发者助手】 来找
25 |
26 | ④
27 | 打开网址(默认浏览器) am start -a android.intent.action.VIEW -d 网址
28 | 微信打开网址
29 | am start -n com.tencent.mm/com.tencent.mm.plugin.webview.ui.tools.WebViewUI -d 网址
30 |
31 | ⑤
32 | 打开桌面图标(比如桌面的快捷方式、小程序等)
33 | am start "intent:@" (@是/data/data/com.miui.home/databases/launcher5x6.db里的图标对应的intent值
34 |
35 | ⑥
36 | 关机 shutdown
37 | 重启 reboot
38 |
--------------------------------------------------------------------------------
/app操作/打开app安装界面.js:
--------------------------------------------------------------------------------
1 | path = '/storage/emulated/0/backups/apps/MD配色参考_1.1.4.apk'
2 | app.startActivity({
3 | data: "file://" + path,
4 | type: "application/vnd.android.package-archive",
5 | action: "VIEW",
6 | flags: ["grant_read_uri_permission", "grant_write_uri_permission"]
7 | })
8 |
--------------------------------------------------------------------------------
/app操作/最新安装的app176.js:
--------------------------------------------------------------------------------
1 |
2 | var pm = context.getPackageManager()
3 | var appList=pm.getInstalledApplications(0)
4 | var appInfoList=[]
5 | for(let i=0;i{
16 | return b.firstInstallTime-a.firstInstallTime
17 | })
18 | log('最新安装的app是=%j',appInfoList[0])
19 |
--------------------------------------------------------------------------------
/app操作/禁止联网133.js:
--------------------------------------------------------------------------------
1 |
2 | uid=`cat /data/system/packages.list | grep com.sohu.inputmethod.sogou | busybox awk '{print $2}'`
3 | iptables -t filter -A OUTPUT -m owner --uid-owner=$uid -j DROP
4 |
5 | 以上是android iptables 屏蔽某个app网络访问的内容,
6 |
--------------------------------------------------------------------------------
/app操作/结束autojs自己.js:
--------------------------------------------------------------------------------
1 | var nowPid = android.os.Process.myPid();
2 | var am = context.getSystemService(java.lang.Class.forName("android.app.ActivityManager"));
3 | var list = am.getRunningAppProcesses();
4 | for(var i=0;i
6 | );
7 | window.setTouchable(false);
8 | setInterval(() => {}, 3000)
9 | paint = new Paint()
10 | paint.setStrokeWidth(5);
11 | paint.setColor(-28707)
12 | paint.setStyle(Paint.Style.STROKE);
13 | window.board.on("draw", function (canvas) {
14 | canvas.drawRect(0,0,300,300,paint)
15 | });
16 |
17 |
--------------------------------------------------------------------------------
/canvas/一直在跳的球255.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/canvas/一直在跳的球255.js
--------------------------------------------------------------------------------
/canvas/图片加文字383.js:
--------------------------------------------------------------------------------
1 | requestScreenCapture();
2 | var img = captureScreen();
3 | var p = new Paint();
4 | var canvas = new Canvas(img);
5 |
6 | p.setStrokeWidth(10)//设置画笔宽度
7 | p.setAntiAlias(true)//设置是否使用抗锯齿功能,如果使用,会导致绘图速度变慢
8 | p.setStyle(Paint.Style.FILL);
9 | p.setTextSize(100)
10 | p.setColor(colors.parseColor("#000000"))
11 | canvas.drawText("xxx",100, 100, p);
12 | images.save(canvas.toImage(), "./1.png");
13 | img.recycle();
--------------------------------------------------------------------------------
/canvas/图片加水印.js:
--------------------------------------------------------------------------------
1 | requestScreenCapture();
2 | var img = captureScreen();
3 | var p = new Paint();
4 | var canvas = new Canvas(img);
5 |
6 | p.setStrokeWidth(10)//设置画笔宽度
7 | p.setAntiAlias(true)//设置是否使用抗锯齿功能,如果使用,会导致绘图速度变慢
8 | p.setStyle(Paint.Style.FILL);
9 | p.setTextSize(100)
10 | p.setColor(colors.parseColor("#000000"))
11 | canvas.drawText("xxx",100, 100, p);
12 | images.save(canvas.toImage(), "./1.png");
13 | img.recycle();
14 |
--------------------------------------------------------------------------------
/canvas/截图水印.js:
--------------------------------------------------------------------------------
1 | toastLog("Are you ready?");
2 | if (!requestScreenCapture()) {
3 | toast("请求截图失败");
4 | exit();
5 | };
6 |
7 |
8 | var IMG=captureScreen();
9 | var bitmap=IMG.getBitmap();
10 | var canvas=new Canvas(bitmap);
11 | var w=canvas.width,h=canvas.height;
12 | var paint = new Paint;
13 | paint.setTextAlign(Paint.Align.CENTER);
14 | paint.setStrokeWidth(5);
15 | paint.setARGB(127,127,127,127);
16 | var size = 150;
17 | paint.setTextSize(size);
18 | canvas.drawText("这是我的截图", w / 2, h / 2 + 0.365 * size, paint);
19 |
20 | var img=canvas.toImage();
21 | images.save(img,"/sdcard/脚本/我的截图.png","png",50);
22 |
--------------------------------------------------------------------------------
/canvas/截图水印412.js:
--------------------------------------------------------------------------------
1 | toastLog("Are you ready?");
2 | if (!requestScreenCapture()) {
3 | toast("请求截图失败");
4 | exit();
5 | };
6 |
7 |
8 | var IMG=captureScreen();
9 | var bitmap=IMG.getBitmap();
10 | var canvas=new Canvas(bitmap);
11 | var w=canvas.width,h=canvas.height;
12 | var paint = new Paint;
13 | paint.setTextAlign(Paint.Align.CENTER);
14 | paint.setStrokeWidth(5);
15 | paint.setARGB(127,127,127,127);
16 | var size = 150;
17 | paint.setTextSize(size);
18 | canvas.drawText("这是我的截图", w / 2, h / 2 + 0.365 * size, paint);
19 |
20 | var img=canvas.toImage();
21 | images.save(img,"/sdcard/脚本/我的截图.png","png",50);
--------------------------------------------------------------------------------
/canvas/画正方形.js:
--------------------------------------------------------------------------------
1 | var window = floaty.rawWindow(
2 |
6 | );
7 | window.setTouchable(false);
8 | setInterval(() => {}, 3000)
9 | paint = new Paint()
10 | paint.setStrokeWidth(5);
11 | paint.setColor(-28707)
12 | paint.setStyle(Paint.Style.STROKE);
13 | window.board.on("draw", function (canvas) {
14 | canvas.drawRect(0,0,300,300,paint)
15 | });
16 |
--------------------------------------------------------------------------------
/events/按下键停止脚本运行252.js:
--------------------------------------------------------------------------------
1 |
2 | //无名小姐 -----<<>>><<<>--- 将就吧!
3 | events.setKeyInterceptionEnabled("volume_down", true);
4 | threads.start(function(){
5 | events.observeKey();
6 | events.on("key", function(volume_down, event){
7 | //处理按键事件
8 | // toast("音量下键被按下了");
9 | toast("脚本已停止运行");
10 | //exit();
11 | });
12 | });
13 |
14 | //主线程代码
15 | while(true){
16 | sleep(1000);
17 | log("ghhj");
18 | }
--------------------------------------------------------------------------------
/events/气泡监听和移除.js:
--------------------------------------------------------------------------------
1 | events.observeToast();
2 | events.onToast(function(toast){
3 | log("Toast内容: " + toast.getText() + " 包名: " + toast.getPackageName());
4 | events.removeAllListeners()
5 | });
6 |
7 | // setTimeout(
8 | // function(){
9 | // log(events.eventNames())
10 | // events.removeAllListeners()
11 | // log('所有监听移除')
12 | // log(events.eventNames())
13 | // },3000
14 | // )
15 |
--------------------------------------------------------------------------------
/http/1查询本机IP地理位置322.js:
--------------------------------------------------------------------------------
1 | var ip地理位置 = false
2 | var ip地理位置正则 = /本机IP: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}<\/span>([\s\S]*?)<\/td/
3 | var ipUrl = "http://www.baidu.com/s?ie=UTF-8&wd=ip%E5%BD%92%E5%B1%9E%E5%9C%B0%E6%9F%A5%E8%AF%A2"
4 | var r = http.get(ipUrl);
5 | log("code = " + r.statusCode);
6 | var htmlResult = r.body.string()
7 | ip地理位置 = ip地理位置正则.exec(htmlResult)
8 | if (ip地理位置) {
9 | ip地理位置 = ip地理位置正则.exec(ip地理位置)
10 | ip地理位置 = ip地理位置[1]
11 | toastLog(ip地理位置)
12 | } else {
13 | log('没有查询到Ip地理位置,脚本停止')
14 | exit()
15 | }
16 |
--------------------------------------------------------------------------------
/http/[Http代理] 讯代理_优质代理425.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/http/[Http代理] 讯代理_优质代理425.js
--------------------------------------------------------------------------------
/http/httpBuild.js:
--------------------------------------------------------------------------------
1 | var myUrl='https://www.baidu.com'
2 | var client=new OkHttpClient()
3 | var request=new Request.Builder()
4 | .url(myUrl)
5 | .get()
6 | .build()
7 |
8 | client.newCall(request).enqueue(new Callback(
9 | {
10 | onFailure:function(call,err){
11 | log(err)
12 | },
13 | onResponse:function(call,res){
14 | log(res.body().string())
15 | }
16 | }
17 | ))
18 |
--------------------------------------------------------------------------------
/http/http超时返回null.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | let request = http.request;
3 | // 覆盖http关键函数request,其他http返回最终会调用这个函数
4 | http.request = function () {
5 | try {
6 | // 捕捉所有异常
7 | return request.apply(http, arguments);
8 | } catch (e) {
9 | // 出现异常返回null
10 | console.error(e);
11 | return null;
12 | }
13 | }
14 | })();
15 |
16 | //设置超时为10秒
17 | http.__okhttp__.setTimeout(10000);
18 | // 获取一个不存在的网站,应该会Timeout (或者把网络断开)
19 | console.log(http.get("https://www.google.com.hk"));
20 | toast("程序结束");
21 |
--------------------------------------------------------------------------------
/http/格式化headers.js:
--------------------------------------------------------------------------------
1 | // var str = files.read('./data.js')
2 | var str = getClip()
3 | log("\n\n\n"+str + "\n\n\n");
4 | var array = str.split("\n");
5 | var 非空行=[]
6 | var json = {};
7 | array.map(
8 | (line)=>{
9 | if(line.length>3 && !(/^(GET|POST).*HTTP\//.test(line))){
10 | 非空行.push(line)
11 | }
12 | if(/^(GET|POST).*HTTP\//.test(line)){
13 | line=line.trim()
14 | var method=line.match(/[^ ]*(?= )/)[0]
15 | var url=line.match(/\/[^ ]*(?= )/)[0]
16 | log(method)
17 | json.method=method
18 | json.url=url
19 | }
20 | }
21 | )
22 | log(非空行)
23 | for (let i = 0; i < 非空行.length; i++) {
24 | var kvstr = 非空行[i].split(":");
25 | var key = kvstr[0].trim();
26 | var value = kvstr[1].trim();
27 | json[key] = value;
28 | }
29 | log("\n\n\n==========================================================================================\n\n\n");
30 | log("\n\n\n",json, "\n\n\n");
31 |
--------------------------------------------------------------------------------
/http/获取内外网ip地址.js:
--------------------------------------------------------------------------------
1 | auto();
2 | console.show();
3 |
4 | importClass('java.net.Inet4Address');
5 | importClass('java.net.InetAddress');
6 | importClass('java.net.NetworkInterface');
7 | importClass('java.util.Enumeration');
8 | importClass('java.net.Inet6Address');
9 | //获取内网IP地址
10 | var hostIp = null;
11 | try{
12 | var nis = NetworkInterface.getNetworkInterfaces();
13 | var ia = null;
14 | while (nis.hasMoreElements()) {
15 | var ni = nis.nextElement();
16 | var ias = ni.getInetAddresses();
17 | while (ias.hasMoreElements()) {
18 | ia = ias.nextElement();
19 | if (ia instanceof Inet6Address) {
20 | continue;
21 | }
22 | var ip = ia.getHostAddress();
23 | if (!"127.0.0.1".equals(ip)) {
24 | hostIp = ia.getHostAddress();
25 | break;
26 | }
27 | }
28 | }
29 | } catch (e) {
30 | log(e);
31 | }
32 | log(hostIp);
33 |
34 | //获取外网ip地址
35 | var getIp_api = http.get('http://pv.sohu.com/cityjson?ie=utf-8');
36 | var InetIP = getIp_api.body.string();
37 | eval(InetIP);
38 | log(returnCitySN.cip);
39 |
--------------------------------------------------------------------------------
/intent/发送广播.js:
--------------------------------------------------------------------------------
1 | // 发送广播: android.intent.action.激活路飞
2 | var action="android.intent.action.激活路飞"
3 | app.sendBroadcast(
4 | {
5 | action:action,
6 | extras:{
7 | name:'哦雷瓦路飞',
8 | dream:'One Piece'
9 | }
10 | }
11 | );
12 | log('发送了广播',action)
13 |
--------------------------------------------------------------------------------
/intent/启动脚本autojsProIntent.js:
--------------------------------------------------------------------------------
1 | app.startActivity({
2 | packageName : "org.autojs.autojspro",
3 | className : "org.autojs.autojs.external.open.RunIntentActivity",
4 | data : "/sdcard/脚本/2.js",
5 | type : "application/x-javascript"
6 | });
7 |
--------------------------------------------------------------------------------
/intent/启动脚本data.js:
--------------------------------------------------------------------------------
1 | app.startActivity({
2 | packageName : "org.autojs.autojs",
3 | className : "org.autojs.autojs.external.open.RunIntentActivity",
4 | data : "/sdcard/脚本/2.js",
5 | type : "application/x-javascript"
6 | });
7 |
--------------------------------------------------------------------------------
/intent/启动脚本extras.js:
--------------------------------------------------------------------------------
1 | app.startActivity({
2 | packageName : "org.autojs.autojs",
3 | className : "org.autojs.autojs.external.open.RunIntentActivity",
4 | extras : {
5 | script: "engines.stopAllAndToast();",
6 | },
7 | type : "application/x-javascript"
8 | });
9 |
--------------------------------------------------------------------------------
/intent/小米图库查看图片.js:
--------------------------------------------------------------------------------
1 | app.startActivity({
2 | action: "android.intent.action.VIEW",
3 | packageName: "com.miui.gallery",
4 | className: "com.miui.gallery.activity.ExternalPhotoPageActivity",
5 | data: app.parseUri("file:///storage/emulated/0/DCIM/Screenshots/Screenshot_2019-04-10-10-33-44-041_org.autojs.autojspro.png"),
6 | type: "image/png",
7 | flags: ["grant_read_uri_permission","grant_write_uri_permission"],
8 | });
9 |
--------------------------------------------------------------------------------
/intent/打开vpn.js:
--------------------------------------------------------------------------------
1 | var intent=new Intent()
2 | intent.setAction("android.settings.VPN_SETTINGS")
3 | app.startActivity(intent)
4 |
--------------------------------------------------------------------------------
/intent/打开关闭usb网络共享.js:
--------------------------------------------------------------------------------
1 | app.startActivity({
2 | packageName: "com.android.settings",
3 | className: "com.android.settings.Settings$TetherSettingsActivity"
4 | });
5 | waitForActivity("com.android.settings.Settings$TetherSettingsActivity")
6 | click("USB 共享网络");
7 |
--------------------------------------------------------------------------------
/intent/打开无障碍设置界面.js:
--------------------------------------------------------------------------------
1 | var intent = new Intent();
2 | intent.setAction("android.settings.ACCESSIBILITY_SETTINGS"); //打开无障碍设置界面
3 | app.startActivity(intent);
4 |
--------------------------------------------------------------------------------
/intent/打开飞行模式设置界面.js:
--------------------------------------------------------------------------------
1 | var intent=new Intent()
2 | intent.setAction("android.settings.AIRPLANE_MODE_SETTINGS")
3 | app.startActivity(intent)
4 |
--------------------------------------------------------------------------------
/intent/提取广播数据.js:
--------------------------------------------------------------------------------
1 | let intent = engines.myEngine().execArgv.intent;
2 | if (intent == null) {
3 | toastLog("请使用定时任务运行此脚本");
4 | exit();
5 | }
6 | log("action = ", intent.action);
7 | log("package = ", intent.package);
8 | log("data = ", intent.data);
9 | let extras = intent.extras;
10 | log("extras = ", intent.extras);
11 | if (extras) {
12 | let str = "{\n";
13 | let iter = extras.keySet().iterator();
14 | while (iter.hasNext()) {
15 | let key = iter.next();
16 | let value = extras.get(key);
17 | str += " " + key + ": " + value;
18 | str += ", \n";
19 | }
20 | str += "}";
21 | log(str);
22 | }
23 |
--------------------------------------------------------------------------------
/intent/淘宝 内打开网页389.js:
--------------------------------------------------------------------------------
1 | app.startActivity({
2 | action: "android.intent.action.VIEW",
3 | data: "taobao://hitow.net"
4 | });
--------------------------------------------------------------------------------
/intent/语音识别.js:
--------------------------------------------------------------------------------
1 | //importClass(android.content.Intent);
2 | importClass(android.speech.RecognizerIntent)
3 |
4 | intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
5 | //intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
6 | // intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音识别");
7 | // app.startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
8 | intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); //本地识别程序
9 |
10 | intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); //网络识别程序
11 | app.startActivity(intent);
12 |
--------------------------------------------------------------------------------
/jar/二维码识别.js:
--------------------------------------------------------------------------------
1 | runtime.loadDex("/storage/emulated/0/Tencent/QQfile_recv/zy.dex");
2 | importPackage(com.google.zxing);
3 | importPackage(com.google.zxing.common);
4 | importPackage(com.google.zxing.client.j2se);
5 |
6 | var imgPath = "/sdcard/Quark/Download/zx.png";
7 |
8 | var pixels = images.readPixels(imgPath);
9 | var w = pixels.width;
10 | var h = pixels.height;
11 | var binaryBitmap = new BinaryBitmap(new HybridBinarizer(
12 | new RGBLuminanceSource(w, h, pixels.data)));
13 | var qrCodeResult = new MultiFormatReader().decode(binaryBitmap);
14 | toastLog(qrCodeResult.getText());
15 |
--------------------------------------------------------------------------------
/module.expo.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/module.expo.pdf
--------------------------------------------------------------------------------
/pro商店的脚本/UI脚本使用无障碍的最佳实践-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "UI脚本使用无障碍的最佳实践",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.org.autojs.pro",
23 | "publish": {
24 | "category": "实用工具",
25 | "details": "作者提供的UI最佳无障碍服务开启方式,UI完美体验,从此拒绝线程,拒绝卡屏🤔🤔",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "作者提供的UI最佳无障碍服务开启方式",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/Uiobject节点的智能提示(包含文档中没有的api)-1.0.0.1/main.js:
--------------------------------------------------------------------------------
1 | //示列
2 | var uinode = require("./UiNode").UiNode;
3 |
4 | var obj = text("Auto.js Pro").findOne(200);
5 |
6 | if(obj!=null){
7 | var node = uinode.create(obj);
8 |
9 | //获得节点文本
10 | print(node.text)
11 |
12 | //控件是否可见
13 | print(node.visibleToUser);
14 |
15 | //节点的方法,获取控件的宽高
16 | print(node.method.bounds());
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/pro商店的脚本/Uiobject节点的智能提示(包含文档中没有的api)-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "Uiobject节点的智能提示(包含文档中没有的api)",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.uinode",
23 | "publish": {
24 | "category": "实用工具",
25 | "details": "包含有文档中没有的api",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "对aj的uiobject对象的简单封装",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/ui启动ui-1.0.0.1/main.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | "ui";
3 |
4 | ui.layout(
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | );
14 |
15 | ui.click_me.on("click", ()=>{
16 | engines.execScriptFile("./ui.js");
17 | });
18 |
19 | ui.click_me.on("long_click", ()=>{
20 | toast("我被长按啦");
21 | });
--------------------------------------------------------------------------------
/pro商店的脚本/ui启动ui-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 1555903559728,
5 | "build_id": "2894FAF6-4",
6 | "build_number": 4,
7 | "release": false
8 | },
9 | "encryptLevel": 0,
10 | "useFeatures": [],
11 | "launchConfig": {
12 | "displaySplash": true,
13 | "hideLogs": false,
14 | "splashText": "Powered by Auto.js Pro",
15 | "stableMode": false
16 | },
17 | "mainScriptFile": "main.js",
18 | "name": "ui启动ui",
19 | "optimization": {
20 | "removeOpenCv": true,
21 | "unusedResources": false
22 | },
23 | "packageName": "org.example.uistartui",
24 | "publish": {
25 | "category": "官方示例",
26 | "details": "在UI中启动另一个UI界面的官方示例",
27 | "maxAutoJsVersion": -1,
28 | "maxProVersion": 7009999,
29 | "minAutoJsVersion": -1,
30 | "minProVersion": 7000000,
31 | "minSdkVersion": 0,
32 | "permissions": [],
33 | "summary": "在UI中启动另一个UI界面的官方示例",
34 | "tags": []
35 | },
36 | "scripts": {},
37 | "versionCode": 1,
38 | "versionName": "1.0.0"
39 | }
--------------------------------------------------------------------------------
/pro商店的脚本/ui启动ui-1.0.0.1/ui.js:
--------------------------------------------------------------------------------
1 | "ui";
--------------------------------------------------------------------------------
/pro商店的脚本/一般常用函数模块-1.0.15.1015/lib/RootTools-3.4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/pro商店的脚本/一般常用函数模块-1.0.15.1015/lib/RootTools-3.4.jar
--------------------------------------------------------------------------------
/pro商店的脚本/一般常用函数模块-1.0.15.1015/main.js:
--------------------------------------------------------------------------------
1 | /**
2 | * vscode下按住 ctrl键 点击函数名,可快速跳转到该函数源码处
3 | */
4 |
5 |
6 | // const root = require("./modules/ex_by_root");
7 | const user = require("./modules/ex_by_user");
8 | // if(user.zip("/sdcard/脚本/")) {
9 | // log("压缩完成");
10 | // }
11 |
12 |
13 | // Array.prototype.uniq = function() {
14 | // var arr = [];
15 | // var flag = true;
16 | // this.forEach(function(item) {
17 | // if (item !== item) {
18 | // flag && arr.indexOf(item) === -1 ? arr.push(item) : ""
19 | // flag = false
20 | // } else {
21 | // arr.indexOf(item) === -1 ? arr.push(item) : ""
22 | // }
23 | // })
24 | // return arr;
25 | // }
26 |
27 | // const filterNonUnique = arr => arr.filter(i => arr.indexOf(i) === arr.lastIndexOf(i))
28 | // const filterUnique = arr => arr.filter(i => arr.indexOf(i) !== arr.lastIndexOf(i))
29 |
30 |
31 | log("是否安装busybox: "+user.isBusyboxAvailable()); //判断是否安装 busybox
32 | log("设备是否root: "+user.isRootAvailable()); //判断设备是否root
33 |
--------------------------------------------------------------------------------
/pro商店的脚本/一般常用函数模块-1.0.15.1015/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "一般常用函数模块",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.extend.modules",
23 | "publish": {
24 | "category": "模块",
25 | "details": "包含root权限函数和user权限函数,请看readme.txt",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 4,
31 | "permissions": [],
32 | "summary": "更新:添加、读取、清空通讯录函数",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1015,
37 | "versionName": "1.0.15"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/二维码自定义生成-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "icon": "res/logo.png",
11 | "launchConfig": {
12 | "displaySplash": true,
13 | "hideLogs": false,
14 | "splashText": "Powered by Auto.js Pro",
15 | "stableMode": true
16 | },
17 | "mainScriptFile": "二维码生成.js",
18 | "name": "二维码自定义生成",
19 | "optimization": {
20 | "removeOpenCv": false,
21 | "unusedResources": false
22 | },
23 | "packageName": "com.thbelief.erweima",
24 | "publish": {
25 | "category": "实用工具",
26 | "details": "自定义文本颜色等等。。。",
27 | "maxAutoJsVersion": -1,
28 | "maxProVersion": 7030,
29 | "minAutoJsVersion": -1,
30 | "minProVersion": 7000,
31 | "minSdkVersion": 2,
32 | "permissions": [],
33 | "summary": "一个简单的自定义二维码赛生成的脚本。(需联网)",
34 | "tags": []
35 | },
36 | "scripts": {},
37 | "versionCode": 1,
38 | "versionName": "1.0.0"
39 | }
--------------------------------------------------------------------------------
/pro商店的脚本/二维码自定义生成-1.0.0.1/res/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/pro商店的脚本/二维码自定义生成-1.0.0.1/res/logo.png
--------------------------------------------------------------------------------
/pro商店的脚本/亲戚关系计算器-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "icon": "res/logo.png",
11 | "launchConfig": {
12 | "displaySplash": true,
13 | "hideLogs": false,
14 | "splashText": "Powered by Auto.js Pro",
15 | "stableMode": false
16 | },
17 | "mainScriptFile": "main.js",
18 | "name": "亲戚关系计算器",
19 | "optimization": {
20 | "removeOpenCv": false,
21 | "unusedResources": false
22 | },
23 | "packageName": "com.qinqie.js.bjzf",
24 | "publish": {
25 | "category": "实用工具",
26 | "details": "懒得写,反正也看不到",
27 | "maxAutoJsVersion": -1,
28 | "maxProVersion": 7009999,
29 | "minAutoJsVersion": -1,
30 | "minProVersion": 4000000,
31 | "minSdkVersion": 2,
32 | "permissions": [],
33 | "summary": "逄年过节遇到三姑六婆,拒绝叫不出口的尴尬!轻松搞定亲戚关系~",
34 | "tags": []
35 | },
36 | "scripts": {},
37 | "versionCode": 1,
38 | "versionName": "1.0.0"
39 | }
--------------------------------------------------------------------------------
/pro商店的脚本/亲戚关系计算器-1.0.0.1/res/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/pro商店的脚本/亲戚关系计算器-1.0.0.1/res/logo.png
--------------------------------------------------------------------------------
/pro商店的脚本/免root启用无障碍-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "打开无障碍.js",
17 | "name": "免root启用无障碍",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.aaa.bbb",
23 | "publish": {
24 | "category": "实用工具",
25 | "details": "免root打开(任意应用的)无障碍权限。(需adb授权一次,重启不失效~)",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "免root启用无障碍服务",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/刮刮卡之佐罗-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "刮刮卡之佐罗",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.zuo.luo",
23 | "publish": {
24 | "category": "其他",
25 | "details": "DST OUT模式",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "模拟刮刮卡效果",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/图片相交的效果PorterDuffXfermode-1.0.1.2/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "图片相交的效果PorterDuffXfermode",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.porterDuffXfermode.mode",
23 | "publish": {
24 | "category": "其他",
25 | "details": "PorterDuffXfermode",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 0,
31 | "permissions": [],
32 | "summary": "两个图片相交的15种效果",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 2,
37 | "versionName": "1.0.1"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/对话框自定义View-1.0.0.1/main.js:
--------------------------------------------------------------------------------
1 | // 需要Pro 7.0.3-4以上
2 | requiresAutojsVersion(7000304);
3 |
4 | // 将xml渲染为view,这个view将显示在对话框中
5 | let view = ui.inflate(
6 |
7 | 用户名
8 |
9 | 密码
10 |
11 |
12 | , null, false);
13 |
14 | // 显示对话框
15 | dialogs.build({
16 | customView: view,
17 | title: "登录",
18 | positive: "确定",
19 | negative: "取消",
20 | // view高度超过对话框时是否可滑动
21 | wrapInScrollView: false,
22 | // 按下按钮时是否自动结束对话框
23 | autoDismiss: false
24 | }).on("positive", (dialog) => {
25 | let username = String(view.username.getText())
26 | let password = String(view.password.getText())
27 | log(username, password);
28 | if (username != 'root' && password != '123456') {
29 | view.password.setError("密码不正确");
30 | } else {
31 | dialog.dismiss();
32 | toast("登录成功");
33 | }
34 | }).on("negative", (dialog) => {
35 | dialog.dismiss();
36 | }).show();
--------------------------------------------------------------------------------
/pro商店的脚本/对话框自定义View-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "对话框自定义View",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.example.dialog.customview",
23 | "publish": {
24 | "category": "官方示例",
25 | "details": "定制对话框显示内容",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000304,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "定制对话框显示内容",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/屏幕取色-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "屏幕取色",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.daWanWei.getColor",
23 | "publish": {
24 | "category": "实用工具",
25 | "details": "点击截屏按钮刷新图像。\n可以移动缩放图像进行选择坐标点。点击中间的圆圈可以获取,复制像素点的坐标和颜色。通过拖动移动按钮来移动悬浮窗的位置,点击移动按钮可以将悬浮窗最小化。",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 4,
31 | "permissions": [],
32 | "summary": "获取屏幕上像素点的颜色和坐标。",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/属性动画ObjectAnimator-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "属性动画ObjectAnimator",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.object.animator",
23 | "publish": {
24 | "category": "其他",
25 | "details": "属性动画ObjectAnimator",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "属性动画ObjectAnimator",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/录屏简单实现-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": true
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "录屏简单实现",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "org.wumin.screen",
23 | "publish": {
24 | "category": "实用工具",
25 | "details": "这是一个简单的录屏功能实现",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "简单录屏功能实现",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/悬浮按钮-2.0.0-1.2/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "悬浮按钮",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "doolu.com",
23 | "publish": {
24 | "category": "实用工具",
25 | "details": "推荐用Pro版本\n优化上一版的BUG\n新增跟随屏幕方向自动调整位置\n大柒👆",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "仿AJ的悬浮按钮",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 2,
37 | "versionName": "2.0.0-1"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/悬浮教程文档-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "icon": "res/logo.png",
11 | "launchConfig": {
12 | "displaySplash": true,
13 | "hideLogs": false,
14 | "splashText": "Powered by Auto.js Pro",
15 | "stableMode": false
16 | },
17 | "mainScriptFile": "main.js",
18 | "name": "悬浮教程文档",
19 | "optimization": {
20 | "removeOpenCv": false,
21 | "unusedResources": false
22 | },
23 | "packageName": "com.daWanWei.xfjcwd",
24 | "publish": {
25 | "category": "实用工具",
26 | "details": "用悬浮窗来显示教程文档。和网上js教程。可以移动悬浮窗。可以最小化悬浮窗。",
27 | "maxAutoJsVersion": -1,
28 | "maxProVersion": 7009999,
29 | "minAutoJsVersion": -1,
30 | "minProVersion": 7000000,
31 | "minSdkVersion": 4,
32 | "permissions": [],
33 | "summary": "用一个悬浮窗来显示教程文档。\n和一些网络js教程。可以最小化,方便随时查询。",
34 | "tags": []
35 | },
36 | "scripts": {},
37 | "versionCode": 1,
38 | "versionName": "1.0.0"
39 | }
--------------------------------------------------------------------------------
/pro商店的脚本/悬浮教程文档-1.0.0.1/res/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/pro商店的脚本/悬浮教程文档-1.0.0.1/res/logo.png
--------------------------------------------------------------------------------
/pro商店的脚本/打手那个枪-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "打手那个枪",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.shou.qiang",
23 | "publish": {
24 | "category": "其他",
25 | "details": "战斗吧!骚年",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "摇一摇",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/文件选择对话框-1.0.1.2/main.js:
--------------------------------------------------------------------------------
1 | let FileChooserDialog = require("./file_chooser_dialog");
2 | FileChooserDialog.build({
3 | title: '请选择目标文件',
4 | // 初始文件夹路径
5 | dir: "/sdcard/脚本",
6 | // 可选择的类型,file为文件,dir为文件夹
7 | canChoose: ["file"],
8 | // 选择文件后的回调
9 | fileCallback: (file) => {
10 | toast(file);
11 | }
12 | })
13 | .show();
--------------------------------------------------------------------------------
/pro商店的脚本/文件选择对话框-1.0.1.2/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "文件选择对话框",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.example.filechooser",
23 | "publish": {
24 | "category": "官方示例",
25 | "details": "文件(夹)单选的对话框,后续支持多选",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 9999999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000304,
30 | "minSdkVersion": 0,
31 | "permissions": [],
32 | "summary": "文件(夹)单选的对话框,后续支持多选",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 2,
37 | "versionName": "1.0.1"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/无情的打字机-1.0.0.0/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "无情的打字机",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "pack.name.i.dont.know.com",
23 | "publish": {
24 | "category": "其他",
25 | "details": "只是一个很鸡肋的打字机",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "无聊之作(新手之作)",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 0,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/更新UI悬浮窗样例-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "更新UI悬浮窗样例",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.example.ui.android",
23 | "publish": {
24 | "category": "实用工具",
25 | "details": "UI+悬浮窗",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 3,
31 | "permissions": [],
32 | "summary": "版本更新对话弹窗",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/更新UI悬浮窗样例-1.0.0.1/res/img/download_bg-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/pro商店的脚本/更新UI悬浮窗样例-1.0.0.1/res/img/download_bg-1.png
--------------------------------------------------------------------------------
/pro商店的脚本/画经典分形图案Mandelbrot-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "画经典分形图案Mandelbrot",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.mandel.brot",
23 | "publish": {
24 | "category": "其他",
25 | "details": "画经典分形图案Mandelbrot",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "画经典分形图案Mandelbrot",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/脚本引擎实现顺序执行-1.0.0.1/main.js:
--------------------------------------------------------------------------------
1 | const scripts=["脚本1.js","脚本2.js","脚本3.js"]
2 | var enginess=[];
3 |
4 | var mainEnengine=engines.myEngine();
5 |
6 | var iii=setInterval(()=>{},1000);//保持主脚本不停,实际使用有ui也可以没有这个
7 |
8 | events.on("control",(i)=>{
9 | i++;
10 | if(i>=scripts.length)exit();//这里不知道为什么用clearInterval不行
11 |
12 | var ae=engines.execScriptFile(scripts[i])
13 | sleep(500)//等待脚本运行
14 | var aengine=ae.getEngine();
15 | aengine.emit("prepare",i,mainEnengine)
16 |
17 | enginess.push(aengine);//便于后续管理
18 | });
19 |
20 | mainEnengine.emit("control",-1);
21 |
--------------------------------------------------------------------------------
/pro商店的脚本/脚本引擎实现顺序执行-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "脚本引擎实现顺序执行",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "muling.engines",
23 | "publish": {
24 | "category": "其他",
25 | "details": "null",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 0,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 0,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "简单实现脚本引擎顺序控制子脚本运行",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/pro商店的脚本/脚本引擎实现顺序执行-1.0.0.1/脚本1.js:
--------------------------------------------------------------------------------
1 | var mainEngine;
2 | var index;
3 |
4 | var ii=setInterval(()=>{},1000)
5 | events.on("prepare",function(i,obj){
6 | mainEngine=obj;
7 | index=i;
8 | main();
9 | clearInterval(ii);
10 | });
11 |
12 |
13 | //执行逻辑
14 | function main(){
15 | for(var i=0;i<8;i++){
16 | log("这里是脚本1 loop"+i);
17 | sleep(100);
18 | }
19 | mainEngine.emit("control",index);
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/pro商店的脚本/脚本引擎实现顺序执行-1.0.0.1/脚本2.js:
--------------------------------------------------------------------------------
1 | var mainEngine;
2 | var index;
3 |
4 | var ii=setInterval(()=>{},1000)
5 | events.on("prepare",function(i,obj){
6 | mainEngine=obj;
7 | index=i;
8 | main();
9 | clearInterval(ii);
10 | });
11 |
12 |
13 | //执行逻辑
14 | function main(){
15 | for(var i=0;i<9;i++){
16 | log("这里是脚本2 loop"+i);
17 | sleep(100);
18 | }
19 | mainEngine.emit("control",index);
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/pro商店的脚本/脚本引擎实现顺序执行-1.0.0.1/脚本3.js:
--------------------------------------------------------------------------------
1 | var mainEngine;
2 | var index;
3 |
4 | var ii=setInterval(()=>{},1000)
5 | events.on("prepare",function(i,obj){
6 | mainEngine=obj;
7 | index=i;
8 | main();
9 | clearInterval(ii);
10 | });
11 |
12 |
13 | //执行逻辑
14 | function main(){
15 | for(var i=0;i<10;i++){
16 | log("这里是脚本3 loop"+i);
17 | sleep(100);
18 | }
19 | mainEngine.emit("control",index);
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/pro商店的脚本/跑马灯-1.0.0.1/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_time": 0,
5 | "build_number": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "跑马灯",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "com.paoma.deng",
23 | "publish": {
24 | "category": "其他",
25 | "details": "跑马灯",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 7009999,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 7000000,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "跑马灯",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/养号/dy关注粉丝/Command.js:
--------------------------------------------------------------------------------
1 | function Command(name,limitTime){
2 | this.name=name
3 | this.action=()=>{}
4 | this.limitTime=limitTime || 3000
5 | var that=this
6 | this.go=function(args1,args2){
7 | log('命令'+this.name+'开始')
8 | var myId=threads.start(
9 | function(){
10 | that.action(args1,args2)
11 | }
12 | )
13 | sleep(this.limitTime)
14 | if(myId && myId.isAlive && myId.isAlive()){
15 | myId.interrupt()
16 | }
17 | log('命令'+this.name+'结束')
18 | }
19 | }
20 |
21 | Command.prototype.setAction=function(action){
22 | this.action=action
23 | }
24 | module.exports=Command
25 |
--------------------------------------------------------------------------------
/加密/autojs和nodejs的AES_CBC加解密Demo/nodejs_AES_CBC加解密.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: nodejs_AES_CBC加解密,autojs_AES_CBC加解密
5 | */
6 | const crypto = require('crypto');
7 | var iv = new Buffer('0000000000000000'); // 16位
8 | var encrypt = function (data, key) {
9 | var decodeKey = crypto.createHash('sha256').update(key, 'utf-8').digest();
10 | var cipher = crypto.createCipheriv('aes-256-cbc', decodeKey, iv);
11 | return cipher.update(data, 'utf8', 'base64') + cipher.final('base64');
12 | };
13 | var decrypt = function (data, key) {
14 | var encodeKey = crypto.createHash('sha256').update(key, 'utf-8').digest();
15 | var cipher = crypto.createDecipheriv('aes-256-cbc', encodeKey, iv);
16 | return cipher.update(data, 'base64', 'utf8') + cipher.final('utf8');
17 | };
18 | var data = '我是要加密的数据'
19 | var key = 'key';
20 | var cipher = encrypt(data, key);
21 | var decipher = decrypt(cipher, key);
22 | console.log(cipher);
23 | console.log(decipher);
24 |
--------------------------------------------------------------------------------
/加密/md5.js:
--------------------------------------------------------------------------------
1 | function md5(string) {
2 | return java.math.BigInteger(1,java.security.MessageDigest.getInstance("MD5")
3 | .digest(java.lang.String(string).getBytes())).toString(16);
4 | }
--------------------------------------------------------------------------------
/动画/surface(简单精灵动画)/1122.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/动画/surface(简单精灵动画)/1122.png
--------------------------------------------------------------------------------
/动画/视觉干扰神器(记忆力增强).js:
--------------------------------------------------------------------------------
1 | var window2 = floaty.rawWindow(
2 |
3 |
4 |
5 |
6 | );
7 | window2.setTouchable(false);
8 | window2.setPosition(-400,-444);
9 |
10 |
11 | threads.start(function(){
12 | while(true){
13 | sleep(1);
14 | window2.setPosition(random(0,device.width),random(0,device.height));
15 | }
16 | });
17 |
18 |
19 | while (true) {
20 | sleep(100);
21 | }
--------------------------------------------------------------------------------
/坐标/两点之间的坐标.js:
--------------------------------------------------------------------------------
1 | var x1 = 100
2 | var y1 = 300
3 | var x2 = 100
4 | var y2 = 200
5 | var xy1 = [x1, y1]
6 | var xy2 = [x2, y2]
7 | 输入两个坐标之间的坐标集合(xy1, xy2)
8 |
9 | function 输入两个坐标之间的坐标集合(xy1, xy2) {
10 | var x1 = xy1[0]
11 | var y1 = xy1[1]
12 | var x2 = xy2[0]
13 | var y2 = xy2[1]
14 | var xyArr = []
15 | var distance = Math.pow(((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)), 0.5);
16 | log('distance=', distance)
17 | if (distance == 0) {
18 | log([
19 | [xy1]
20 | ])
21 | return [
22 | [xy1]
23 | ]
24 | }
25 | var xUnit = (x2 - x1) / distance
26 | var yUnit = (y2 - y1) / distance
27 | log('xUnit=', xUnit)
28 | log('yUnit=', yUnit)
29 | for (var i = 0; i <= distance; i++) {
30 | var xTemp = xUnit * i
31 | var yTemp = yUnit * i
32 | xyArr.push([Math.floor(xTemp + x1), Math.floor(yTemp + y1)])
33 | }
34 | log(xyArr)
35 | return xyArr
36 | }
37 |
--------------------------------------------------------------------------------
/字符串/模板字符串.js:
--------------------------------------------------------------------------------
1 | var name = 'jake'
2 | var age = '18'
3 | parseTemplate = (str) => {
4 | var reg = /\$\{.+?\}/g
5 | var r = str.match(reg)
6 | var variable;
7 | var newStr;
8 | for (var i = 0; i < r.length; i++) {
9 | variable = r[i].replace(/[${}]/g, '')
10 | newStr = str.replace(r[i], global[variable])
11 | str = newStr
12 | }
13 | return str
14 | }
15 | str = "im ${name}, my age is ${age}"
16 | newStr = parseTemplate(str)
17 | log(newStr)
18 |
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/audio/attack.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/audio/attack.mp3
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/audio/bulletCrack.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/audio/bulletCrack.mp3
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/audio/move.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/audio/move.mp3
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/audio/playerCrack.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/audio/playerCrack.mp3
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/audio/prop.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/audio/prop.mp3
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/audio/start.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/audio/start.mp3
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/audio/tankCrack.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/audio/tankCrack.mp3
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/images/menu.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/images/menu.gif
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/images/tankAll.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/小游戏/坦克大战游戏/images/tankAll.gif
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/js/Helper.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 数组删除某个元素
3 | * @param arg 元素
4 | * @returns
5 | */
6 | Array.prototype.remove = function(arg) {
7 | var i = 0,
8 | n = 0;
9 | var arrSize = this.length;
10 | for (i = 0; i < arrSize; i++) {
11 | if (this[i] != arg) {
12 | this[n++] = this[i];
13 | }
14 | }
15 | if (n < i) {
16 | this.length = n;
17 | }
18 | };
19 |
20 | /**
21 | * 数组根据下标删除元素
22 | * @param index 元素下标
23 | * @returns
24 | */
25 | Array.prototype.removeByIndex = function(index) {
26 | var i = 0,
27 | n = 0;
28 | var arrSize = this.length;
29 | for (i = 0; i < arrSize; i++) {
30 | if (this[i] != this[index]) {
31 | this[n++] = this[i];
32 | }
33 | }
34 | if (n < i) {
35 | this.length = n;
36 | }
37 | };
38 |
39 | /**
40 | * 数组是否包含某个元素
41 | * @param arg 元素
42 | * @returns
43 | */
44 | Array.prototype.contain = function(arg) {
45 | var i = 0;
46 | var arrSize = this.length;
47 | for (i = 0; i < arrSize; i++) {
48 | if (this[i] == arg) {
49 | return true;
50 | }
51 | }
52 | return false;
53 | };
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/js/keyboard.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 键盘按钮
3 | */
4 |
5 | var Keyboard = function() {
6 |
7 | this.UP = 38;
8 | this.DOWN = 40;
9 | this.RIGHT = 39;
10 | this.LEFT = 37;
11 |
12 | this.SPACE = 32;
13 | this.TAB = 9;
14 | this.ENTER = 13;
15 | this.CTRL = 17;
16 | this.ALT = 18;
17 |
18 | this.Num0 = 48;
19 | this.Num1 = 49;
20 | this.Num2 = 50;
21 | this.Num3 = 51;
22 | this.Num4 = 52;
23 | this.Num5 = 53;
24 | this.Num6 = 54;
25 | this.Num7 = 55;
26 | this.Num8 = 56;
27 | this.Num9 = 57;
28 |
29 | this.A = 65;
30 | this.B = 66;
31 | this.C = 67;
32 | this.D = 68;
33 | this.E = 69;
34 | this.F = 70;
35 | this.G = 71;
36 | this.H = 72;
37 | this.I = 73;
38 | this.J = 74;
39 | this.K = 75;
40 | this.L = 76;
41 | this.M = 77;
42 | this.N = 78;
43 | this.O = 79;
44 | this.P = 80;
45 | this.Q = 81;
46 | this.R = 82;
47 | this.S = 83;
48 | this.T = 84;
49 | this.U = 85;
50 | this.V = 86;
51 | this.W = 87;
52 | this.X = 88;
53 | this.Y = 89;
54 | this.Z = 90;
55 |
56 | };
57 |
58 | var keyboard = new Keyboard();
--------------------------------------------------------------------------------
/小游戏/坦克大战游戏/js/num.js:
--------------------------------------------------------------------------------
1 | var Num = function(context) {
2 | this.ctx = context;
3 | this.size = 14;
4 |
5 | this.draw = function(num, x, y) {
6 | var tempX = x;
7 | var tempY = y;
8 | var tempNumArray = [];
9 | if (num == 0) {
10 | tempNumArray.push(0);
11 | } else {
12 | while (num > 0) {
13 | tempNumArray.push(num % 10);
14 | num = parseInt(num / 10);
15 | }
16 | }
17 | for (var i = tempNumArray.length - 1; i >= 0; i--) {
18 | tempX = x + (tempNumArray.length - i - 1) * this.size;
19 | this.ctx.drawImage(RESOURCE_IMAGE, POS["num"][0] + tempNumArray[i] * 14, POS["num"][1], this.size, this.size, tempX, tempY, this.size, this.size);
20 |
21 | }
22 | };
23 |
24 | };
--------------------------------------------------------------------------------
/工具箱/1删除重写@data@data@com.aaa.bbb226.js:
--------------------------------------------------------------------------------
1 | path="/data/data/com.aaa.bbb"
2 | pathSD="/sdcard/com.aaa.bbb"
3 | //删除原来的文件
4 | shell('chown root:root '+path,true)
5 | shell('rm '+path+" -rf",true);
6 | shell('rm '+pathSD+" -rf",true);
7 | sleep(2000)
8 |
9 | // 解压备份的文件
10 | inkeSdacrdPath="/sdcard/com.aaa.bbb.zip"
11 | 文件路径=inkeSdacrdPath
12 | 文件夹路径="/sdcard"
13 | com.stardust.io.Zip.unzip(new java.io.File(文件路径), new java.io.File(文件夹路径))
14 | sleep(2000)
15 |
16 | //移动解压后的文件
17 | shell("mv -f /sdcard/com.aaa.bbb /data/data/com.aaa.bbb",true);
18 |
19 | //修改权限
20 | shell("chmod -R 777 /data/data/com.aaa.bbb",true);
21 |
22 |
--------------------------------------------------------------------------------
/工具箱/1获取当前app名字122.js:
--------------------------------------------------------------------------------
1 | function 判断当前app() {
2 | console.show();
3 | var result = shell('dumpsys activity top | grep ACTIVITY > /sdcard/1当前app.txt', true);
4 | log(result);
5 | if (result.code == 0) {
6 | toast("执行成功");
7 | } else {
8 | toast("执行失败!请到控制台查看错误信息");
9 | exit()
10 | }
11 | var 文本 = files.read("/sdcard/1当前app.txt")
12 | log("文本=", 文本)
13 | var 当前包名 = /ACTIVITY *(.*)\//.exec(文本)[1]
14 | log('当前包名=', 当前包名)
15 | var appName = getAppName(当前包名)
16 | log('appName=', appName)
17 | }
18 | 判断当前app()
19 |
--------------------------------------------------------------------------------
/工具箱/activity.js:
--------------------------------------------------------------------------------
1 | am = context.getSystemService(context.ACTIVITY_SERVICE);
2 | cn = am.getRunningTasks(1).get(0).topActivity;
3 | // log("current", "pkg:" + cn.getPackageName());
4 | // log("currentclass", "cls:" + cn.getClassName());
5 | var mPackageManager = context.getPackageManager()
6 | // var appList=pm.getInstalledApplications(0)
7 | latestPackageStr=cn.getPackageName()
8 | latestClassStr=cn.getClassName()
9 | componentName = new android.content.ComponentName('org.autojs.autojs', 'org.autojs.autojs.ui.main.MainActivity_')
10 | // mLatestActivity = mPackageManager.getActivityInfo(componentName, 0);
11 | mLatestActivity = mPackageManager.getActivityInfo(componentName, 1);
12 | log(mLatestActivity)
13 |
--------------------------------------------------------------------------------
/工具箱/cookie.js:
--------------------------------------------------------------------------------
1 |
2 | // 免费版
3 | http.__okhttp__.muteClient(new OkHttpClient.Builder().cookieJar(new org.autojs.autojs.network.util.WebkitCookieManagerProxy()))
4 | var cookieManager = android.webkit.CookieManager.getInstance();
5 |
6 | cookieManager.removeAllCookie();
7 | cookieManager.removeSessionCookie();
8 |
9 | // 专业版
10 | http.__okhttp__.muteClient(new OkHttpClient.Builder().cookieJar(web.webkitCookieJar))
11 | var cookieManager = web.cookieManager;
12 | cookieManager.removeAllCookie();
13 | cookieManager.removeSessionCookie();
14 |
--------------------------------------------------------------------------------
/工具箱/music110.js:
--------------------------------------------------------------------------------
1 | function 铃声(铃声类型, 是否循环播放, 播放时长) {
2 | var 铃声类型 = 铃声类型 || 0
3 | var 播放时长 = 播放时长 || 2000
4 | var 是否循环播放 = 是否循环播放 || false
5 | if (是否循环播放) {
6 | 播放时长 = 666 * 1000
7 | }
8 | var 铃声选择结果 = android.media.RingtoneManager.TYPE_NOTIFICATION
9 | switch (铃声类型) {
10 | case 0:
11 | 铃声选择结果 = android.media.RingtoneManager.TYPE_RINGTONE
12 | break;
13 | case 1:
14 | 铃声选择结果 = android.media.RingtoneManager.TYPE_ALARM
15 | break;
16 | case 2:
17 | 铃声选择结果 = android.media.RingtoneManager.TYPE_ALL
18 | break;
19 | default:
20 | break;
21 | }
22 | var mp = new android.media.MediaPlayer();
23 | mp.setDataSource(context, android.media.RingtoneManager.getDefaultUri(铃声选择结果));
24 | if (是否循环播放) mp.setLooping(true);
25 | mp.prepare();
26 | mp.start();
27 | threads.start(function () {
28 | sleep(播放时长)
29 | if (mp.isPlaying()) {
30 | mp.stop()
31 | }
32 | });
33 | return mp;
34 | }
35 | module.exports=铃声
36 |
--------------------------------------------------------------------------------
/工具箱/shell启动脚本.js:
--------------------------------------------------------------------------------
1 | // 需要root
2 | function runScript(path){
3 | shell("am start -n org.autojs.autojs/org.autojs.autojs.external.open.RunIntentActivity -d file://" + path + " -t application/x-javascript",true)
4 | }
5 | path='/sdcard/脚本/2.js'
6 | runScript(path)
7 |
8 | function runScriptPro1(path) {
9 | shell("am start -n org.autojs.autojspro/org.autojs.autojs.external.open.RunIntentActivity -d file://" + path + " -t application/x-javascript", true)
10 | }
11 |
12 | function runScriptPro2(path) {
13 | shell("am start -n org.autojs.autojspro/org.autojs.autojs.external.open.RunIntentActivity -d file://" + path + " -t text/javascript", true)
14 | }
--------------------------------------------------------------------------------
/工具箱/shell开关飞行模式135.js:
--------------------------------------------------------------------------------
1 |
2 | function 打开飞行模式() {
3 | // 打开飞行模式
4 | new Shell().exec("su -c 'settings put global airplane_mode_on 1; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true'")
5 | }
6 |
7 | function 关闭飞行模式() {
8 | //关闭飞行模式
9 | new Shell().exec("su -c 'settings put global airplane_mode_on 0; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false'")
10 | }
--------------------------------------------------------------------------------
/工具箱/一个字一个字输入:
--------------------------------------------------------------------------------
1 | var str='你好 这是一段测试代码'
2 | var strArray=str.split("")
3 | for(var i=0;i {
3 | engines.execScriptFile(files.cwd() + "/" + file + ".js")
4 | })
5 | end = () => {
6 | enginesAll = engines.all()
7 | log(enginesAll)
8 | enginesAll.map((ScriptEngine) => {
9 | if (engines.myEngine().toString() == ScriptEngine.toString()) {} else {
10 | console.log('即将停止的脚本引擎' + ScriptEngine)
11 | ScriptEngine.forceStop()
12 | }
13 | })
14 | }
15 | setTimeout(end, 5000)
16 |
--------------------------------------------------------------------------------
/工具箱/分享文件到QQ.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 调用QQ分享,分享文件到QQ好友/群 相当于发送文件给QQ好友/群文件
3 | * @param {string} file 本机文件绝对路径
4 | */
5 | function shareToTencent(file) {
6 | importPackage(android.content);
7 |
8 | importClass(android.net.Uri);
9 | importClass(java.io.File);
10 | importClass(android.provider.MediaStore);
11 |
12 | var f = new File(file);
13 | var uri = Uri.fromFile(f);
14 | // var fp = app.parseUri("content://com.estrongs.files"+file);
15 | var fp = app.parseUri(uri.toString());
16 | var intent = new Intent("android.intent.action.SEND");
17 | intent.setType("file/*");
18 | intent.putExtra(Intent.EXTRA_STREAM, uri);
19 | intent.setClipData(ClipData.newRawUri(MediaStore.EXTRA_OUTPUT, fp));
20 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
21 | intent.setComponent(new ComponentName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity"));
22 |
23 | context.startActivity(intent);
24 | }
25 |
26 | shareToTencent("/sdcard/Pictures/Screenshots/SVID_20190826_011717.mp4");
27 |
--------------------------------------------------------------------------------
/工具箱/删除行.js:
--------------------------------------------------------------------------------
1 | var path = "/sdcard/脚本/test.txt"
2 | var lineNum = 0
3 | deletedLine(path, lineNum)
4 |
5 | function deletedLine(path, lineNum) {
6 | var file, result;
7 | file = open(path, "r")
8 | result = file.readlines()
9 | file.close();
10 | var tempArr = Array.prototype.slice.call(result);
11 | var line = tempArr.splice(lineNum, 1);
12 | file = open(path, "w")
13 | result = file.writelines(tempArr)
14 | file.flush();
15 | file.close();
16 | return line;
17 | }
18 |
--------------------------------------------------------------------------------
/工具箱/单例模式.js:
--------------------------------------------------------------------------------
1 | function Dog(name) {
2 | this.name = name
3 | this.birth = new Date()
4 | }
5 | var single = (function () {
6 | var unique;
7 |
8 | function getInstance() {
9 | if (unique === undefined) {
10 | unique = new Dog('snoopy');
11 | }
12 | return unique;
13 | }
14 | return {
15 | getInstance: getInstance
16 | }
17 | })();
18 | var dog1 = single.getInstance()
19 | console.log('dog1.birth=', dog1.birth)
20 | sleep(2000)
21 | var dog2 = single.getInstance()
22 | console.log('dog2.birth=', dog2.birth)
23 | if (dog1.birth === dog1.birth) {
24 | log(true)
25 | } else {
26 | log(false)
27 | }
28 |
--------------------------------------------------------------------------------
/工具箱/双击返回退出的ui266.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 | );
7 | var isCanFinish = false;
8 | var isCanFinishTimeout;
9 | ui.emitter.on("back_pressed", e => {
10 | if (!isCanFinish) {
11 | isCanFinish = true;
12 | isCanFinishTimeout=setTimeout(() => {
13 | toastLog("双击退出");
14 | isCanFinish = false;
15 | }, 400);
16 | e.consumed = true;
17 | } else {
18 | clearTimeout(isCanFinishTimeout);
19 | e.consumed = false;
20 | };
21 | });
--------------------------------------------------------------------------------
/工具箱/实心158.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.statusBarColor("#ffffff");
3 |
4 | //ui布局为一块画布
5 | ui.layout(
6 |
7 |
8 |
9 | );
10 | //画笔
11 | var paint = new Paint();
12 | //画笔颜色
13 | paint.setARGB(255,0xd5,0,0);
14 |
15 | var Path = new android.graphics.Path;
16 |
17 | for (var t = -Math.PI; t <= Math.PI; t = t + 0.01) {
18 | //坐标系的 x,y
19 | var x = 16 * Math.pow(Math.sin(t), 3);
20 | var y = 13 * Math.cos(t) - 5 * Math.cos(t * 2) - 2 * Math.cos(t * 3) - Math.cos(t * 4);
21 | //增大心
22 | x = x * 16;
23 | y = -y * 16;
24 | //算出对于手机机的坐标 手机左上角是0,0
25 | Path.lineTo(x, y);
26 | };
27 |
28 | Path.close();
29 |
30 | ui.board.on("draw", function(canvas) {
31 | var w = canvas.getWidth() / 2;
32 | var h = canvas.getHeight() / 2;
33 | canvas.translate(w, h);
34 | canvas.drawPath(Path, paint);
35 | });
36 |
--------------------------------------------------------------------------------
/工具箱/实时显示脚本运行时长214.js:
--------------------------------------------------------------------------------
1 | console.show()
2 |
3 | function main() {
4 | threads.start(
5 | function () {
6 | while (1) {
7 | runTime();
8 | sleep(1000)
9 | }
10 | }
11 | )
12 | setInterval(
13 | () => {log('把setInterval改成你要做的事情')}, 1000
14 | )
15 | }
16 | var runTime = function () {
17 | var startTime = new Date().getTime()
18 | return function () {
19 | var endTime = new Date().getTime()
20 | var spendTime = Math.floor((endTime - startTime)/1000)
21 | log(util.format('运行了%d秒',spendTime))
22 | }
23 | }()
24 | main()
25 |
--------------------------------------------------------------------------------
/工具箱/小米锁屏解锁密码8888136.js:
--------------------------------------------------------------------------------
1 |
2 | var password='8888'
3 | if(!device.isScreenOn()){
4 | device.wakeUpIfNeeded()
5 | }
6 | sleep(2000)
7 | 小米锁屏上滑动作()
8 | sleep(300)
9 | for(var i=0;i", 2, 20);
5 | html= html.replace(/[<>\/tdspan]+/g, "\n").split("\n");
6 | dialogs.alert("查询的号码:"+numbel+"\n"+"\n"+"①"+html[1]+"\n"+html[2]+"\n"+"②"+html[3]+":"+html[4]+"\n"+"③"+html[5]+":"+html[6]+"\n"+"④"+html[7]+":"+html[8]);
7 |
8 | function cutstr(a, b, c, f, e) {
9 | a = a.split(b);
10 | var d = ""
11 | if (e < a.length && e != null) {} else {
12 | e = a.length;
13 | }
14 | if (f == null) {
15 | f = 1;
16 | }
17 | for (i = f; i < e; i++) {
18 | tmp = a[i].split(c);
19 | if (tmp.length > 1) {
20 | d += tmp[0];
21 | }
22 | }
23 | return d;
24 | }
--------------------------------------------------------------------------------
/工具箱/抓取logcat日志453.js:
--------------------------------------------------------------------------------
1 | new Shell().exec("logcat -f /sdcard/脚本/log.txt");
--------------------------------------------------------------------------------
/工具箱/提取广播数据126.js:
--------------------------------------------------------------------------------
1 |
2 | let intent = engines.myEngine().execArgv.intent;
3 | if (intent == null) {
4 | toastLog("请使用定时任务运行此脚本");
5 | exit();
6 | }
7 | log("action = ", intent.action);
8 | log("package = ", intent.package);
9 | log("data = ", intent.data);
10 | let extras = intent.extras;
11 | log("extras = ", intent.extras);
12 | if (extras) {
13 | let str = "{\n";
14 | let iter = extras.keySet().iterator();
15 | while (iter.hasNext()) {
16 | let key = iter.next();
17 | let value = extras.get(key);
18 | str += " " + key + ": " + value;
19 | str += ", \n";
20 | }
21 | str += "}";
22 | log(str);
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/工具箱/改变toast位置120.js:
--------------------------------------------------------------------------------
1 | function toastAt0(msg, x, y) {
2 | importClass(android.widget.Toast);
3 | importClass(android.view.Gravity);
4 | var toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
5 | toast.setGravity(Gravity.TOP | Gravity.LEFT, x, y);
6 | toast.show();
7 | }
8 |
9 | function toastAt(msg, x, y) {
10 | ui.run(() => toastAt0(msg, x, y));
11 | }
12 |
13 | toastAt('sdfsfdsdfs',300,300)
14 | sleep(2000)
15 |
--------------------------------------------------------------------------------
/工具箱/数组填充.js:
--------------------------------------------------------------------------------
1 | let n = 1024 * 1024;
2 | let arr = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, n);
3 | java.util.Arrays.fill(arr, 50);
4 |
--------------------------------------------------------------------------------
/工具箱/最大公约数.js:
--------------------------------------------------------------------------------
1 | console.show();
2 |
3 |
4 |
5 |
6 | log(最大公约数(12,10));
7 | log(最大公约数(12,10,8));
8 | log(最大公约数(12,15));
9 | log(最大公约数(14,15,7));
10 |
11 |
12 |
13 |
14 |
15 | function 最大公约数() {
16 | if (arguments.length >= 2) {
17 | let num = arguments[0];
18 | for (let i = 1; i < arguments.length; i++) {
19 |
20 | let m = gcd(num, arguments[i]);
21 | if (Math.abs(m) == 1) {
22 | return m;
23 | } else {
24 | num = m;
25 | };
26 | };
27 | return num;
28 | };
29 |
30 | function gcd(a, b) {
31 | return b ? gcd(b, a % b) : a;
32 | };
33 | };
34 |
35 |
--------------------------------------------------------------------------------
/工具箱/格式化时间262.js:
--------------------------------------------------------------------------------
1 | var window = floaty.rawWindow(
2 |
3 |
4 |
5 |
6 | );
7 |
8 | window.setTouchable(false);
9 | window.setPosition(100, 100);
10 |
11 |
12 |
13 | setInterval(() => {
14 | ui.run(() => {
15 | window.text.setText(new Date().Format("yyyy-MM-dd hh:mm:ss"));
16 | });
17 |
18 | }, 50);
19 |
20 | Date.prototype.Format = function(fmt) { //author: meizz
21 | var o = {
22 | "M+": this.getMonth() + 1, //月份
23 | "d+": this.getDate(), //日
24 | "h+": this.getHours(), //小时
25 | "m+": this.getMinutes(), //分
26 | "s+": this.getSeconds(), //秒
27 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度
28 | "S": this.getMilliseconds() //毫秒
29 | };
30 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
31 | for (var k in o)
32 | if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
33 | return fmt;
34 | }
--------------------------------------------------------------------------------
/工具箱/模板字符串408.js:
--------------------------------------------------------------------------------
1 | var name = 'jake'
2 | var age = '18'
3 | parseTemplate = (str) => {
4 | var reg = /\$\{.+?\}/g
5 | var r = str.match(reg)
6 | var variable;
7 | var newStr;
8 | for (var i = 0; i < r.length; i++) {
9 | variable = r[i].replace(/[${}]/g, '')
10 | newStr = str.replace(r[i], global[variable])
11 | str = newStr
12 | }
13 | return str
14 | }
15 | str = "im ${name}, my age is ${age}"
16 | newStr = parseTemplate(str)
17 | log(newStr)
18 |
--------------------------------------------------------------------------------
/工具箱/用shell操作sqlite数据库331.js:
--------------------------------------------------------------------------------
1 | auto();
2 | console.show()
3 | //更新日期: 2018.7.13
4 | //作者QQ: 203118908
5 | //脚本目的: 使用shell方式来操作sqlite数据库
6 |
7 |
8 | DBFile="/sdcard/中国省市数据库资料.sqlite"
9 | SQLCommandHeader="sqlite3" + " " + DBFile
10 |
11 | //创建数据库
12 | shell(SQLCommandHeader + ' \'CREATE TABLE "中国城市" ("城市ID" INT NOT NULL, "城市名称" VARCHAR(50) PRIMARY KEY, "省属");\'' + " '.quit'")
13 |
14 |
15 | //增
16 | shell(SQLCommandHeader + ' \'insert into 中国城市 values(1,"北京市","北京市");\' ' + " '.quit'")
17 | shell(SQLCommandHeader + ' \'insert into 中国城市 values(2,"太原市","山西省");\' ' + " '.quit'")
18 | shell(SQLCommandHeader + ' \'insert into 中国城市 values(3,"石家庄市","河北省");\' ' + " '.quit'")
19 |
20 |
21 | //删
22 | shell(SQLCommandHeader + ' \'delete from 中国城市 where 城市id=1;\' ' + " '.quit'")
23 |
24 |
25 | //改
26 | shell(SQLCommandHeader + ' \'update 中国城市 set 省属="山西省" where 城市名称="石家庄市";\' ' + " '.quit'")
27 |
28 |
29 | //查
30 | log("\n",shell(SQLCommandHeader +" '.mode column'"+" '.headers on'"+ ' \'select * from 中国城市;\' ' + " '.quit'").result)
31 | log("\n",shell(SQLCommandHeader +" '.mode column'"+" '.headers on'"+" '.output /sdcard/中国城市.txt'"+ ' \'select * from 中国城市;\' ' + " '.quit'").result)
32 |
33 |
34 |
--------------------------------------------------------------------------------
/工具箱/监听一次toast.js:
--------------------------------------------------------------------------------
1 | events.observeToast();
2 | events.once('toast', function () {
3 | log('bbbbbbbbbbbbbbbb')
4 | })
5 | printObj(events)
6 | function printObj(obj){
7 | var arr=[]
8 | for(var k in obj){
9 | arr.push(k)
10 | }
11 | arr.sort()
12 | log(arr)
13 | return arr
14 | }
15 |
--------------------------------------------------------------------------------
/工具箱/繁简转换/繁简转换.js:
--------------------------------------------------------------------------------
1 | var path=module.id.substring(0,module.id.lastIndexOf("/"))
2 | const JT=files.read(path+"/simple.txt");
3 | const FT=files.read(path+"/complex.txt");
4 |
5 | var JFConverter={};
6 |
7 | JFConverter.J2F=function(str){
8 | var ret="";
9 | for(var i of str){
10 | var index=JT.indexOf(i);
11 | if(index==-1)ret+=i;
12 | else ret+=FT[index];
13 | }
14 | return ret;
15 | }
16 |
17 | JFConverter.F2J=function(str){
18 | var ret="";
19 | for(var i of str){
20 | var index=FT.indexOf(i);
21 | if(index==-1)ret+=i;
22 | else ret+=JT[index];
23 | }
24 | return ret;
25 | }
26 |
27 | module.exports = JFConverter;
28 |
--------------------------------------------------------------------------------
/工具箱/线段上的所有点.js:
--------------------------------------------------------------------------------
1 | log(getLinePoints([0.9,1,5,5.5]));
2 |
3 |
4 |
5 |
6 | function getLinePoints(xyAry) {
7 | //xyary=[x1,y1,x2,y2];
8 | let x1 = xyAry[0];
9 | let y1 = xyAry[1];
10 | let x2 = xyAry[2];
11 | let y2 = xyAry[3];
12 | //kx+b=y;求k,b
13 | let k = (y2 - y1) / (x2 - x1);
14 | let b = y1 - k * x1;
15 | //~~~~~~~~~~~~
16 | let x1_ = Math.floor(x1);
17 | let x2_ = Math.floor(x2);
18 | let fx = (x2_ - x1_) / Math.abs(x2_ - x1_);
19 | let pointsAry = new Array;
20 | for (let ix = x1_; ix != x2_+fx; ix += fx) {
21 | let iy = Math.floor(k * ix + b);
22 | if (pointsAry.length) {
23 | if (pointsAry[pointsAry.length - 2] != ix - 1 || pointsAry[pointsAry.length - 1] != iy) {
24 | pointsAry.push(ix - 1, iy);
25 | };
26 | };
27 | pointsAry.push(ix, iy);
28 | };
29 | return pointsAry;
30 | };
31 |
--------------------------------------------------------------------------------
/工具箱/结束autojs自己.js:
--------------------------------------------------------------------------------
1 | var nowPid = android.os.Process.myPid();
2 | var am = context.getSystemService(java.lang.Class.forName("android.app.ActivityManager"));
3 | var list = am.getRunningAppProcesses();
4 | for(var i=0;i{},1000);//保持主脚本不停,实际使用有ui也可以没有这个
7 |
8 | events.on("control",(i)=>{
9 | i++;
10 | if(i>=scripts.length)exit()//这里不知道为什么用clearInterval不行
11 |
12 | let args={
13 | mainEngine:mainEngine,
14 | index:i
15 | }
16 | var ae=advancedEngines.execScriptFile(scripts[i],args)
17 | while(!ae.getEngine());//等待脚本运行
18 | let aengine=ae.getEngine()
19 | enginess.push(aengine);//便于后续管理
20 | });
21 | mainEngine.emit("control",-1);
22 |
--------------------------------------------------------------------------------
/工具箱/脚本引擎实现顺序执行/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0,
6 | "release": false
7 | },
8 | "encryptLevel": 0,
9 | "useFeatures": [],
10 | "launchConfig": {
11 | "displaySplash": true,
12 | "hideLogs": false,
13 | "splashText": "Powered by Auto.js Pro",
14 | "stableMode": false
15 | },
16 | "mainScriptFile": "main.js",
17 | "name": "脚本引擎实现顺序执行",
18 | "optimization": {
19 | "removeOpenCv": false,
20 | "unusedResources": false
21 | },
22 | "packageName": "muling.engines",
23 | "publish": {
24 | "category": "其他",
25 | "details": "null",
26 | "maxAutoJsVersion": -1,
27 | "maxProVersion": 0,
28 | "minAutoJsVersion": -1,
29 | "minProVersion": 0,
30 | "minSdkVersion": 2,
31 | "permissions": [],
32 | "summary": "简单实现脚本引擎顺序控制子脚本运行",
33 | "tags": []
34 | },
35 | "scripts": {},
36 | "versionCode": 1,
37 | "versionName": "1.0.0"
38 | }
--------------------------------------------------------------------------------
/工具箱/脚本引擎实现顺序执行/脚本1.js:
--------------------------------------------------------------------------------
1 | for(var i=0;i<6;i++){
2 | log("这里是脚本1 loop"+i);
3 | sleep(200);
4 | }
5 | mainEngine.emit("control",index);
6 |
7 |
8 |
--------------------------------------------------------------------------------
/工具箱/脚本引擎实现顺序执行/脚本2.js:
--------------------------------------------------------------------------------
1 | for(var i=0;i<6;i++){
2 | log("这里是脚本2 loop"+i);
3 | sleep(200);
4 | }
5 | mainEngine.emit("control",index);
6 |
7 |
8 |
--------------------------------------------------------------------------------
/工具箱/脚本引擎实现顺序执行/脚本3.js:
--------------------------------------------------------------------------------
1 | for(var i=0;i<6;i++){
2 | log("这里是脚本3 loop"+i);
3 | sleep(200);
4 | }
5 | mainEngine.emit("control",index);
6 |
7 |
8 |
--------------------------------------------------------------------------------
/工具箱/脚本排队/1.js:
--------------------------------------------------------------------------------
1 | sleep(3000)
2 | log('我是 1 号脚本')
3 |
--------------------------------------------------------------------------------
/工具箱/脚本排队/2.js:
--------------------------------------------------------------------------------
1 | sleep(1000)
2 |
3 | log('我是 2 号脚本')
4 |
--------------------------------------------------------------------------------
/工具箱/脚本排队/3.js:
--------------------------------------------------------------------------------
1 | sleep(2000)
2 | log('我是 3 号脚本')
3 |
--------------------------------------------------------------------------------
/工具箱/脚本排队第二种/1.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | var storage = storages.create("setting");
3 | var date = '1231111111111111'
4 | ui.layout(
5 |
6 |
7 |
8 |
9 | );
10 |
11 | auto();
12 | ui.ok.click(function() {
13 | threads.start(function() {
14 | date = ui.date.text();
15 | log(date);
16 | storage.put("date", date);
17 | log(storage.get("date"));
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/工具箱/脚本排队第二种/2.js:
--------------------------------------------------------------------------------
1 | for(var i=0;i<3;i++){
2 | toastLog('this is 2.js '+ i)
3 | sleep(1000)
4 | }
--------------------------------------------------------------------------------
/工具箱/脚本排队第二种/3.js:
--------------------------------------------------------------------------------
1 | for(var i=0;i<3;i++){
2 | toastLog('this is 3.js '+ i)
3 | sleep(1000)
4 | }
--------------------------------------------------------------------------------
/工具箱/脚本排队第二种/main.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author 家
3 | * @目的 多个脚本按照顺序执行
4 | * @param {Array} scriptNames
5 | */
6 | function Observer(scriptNames) {
7 | this.scriptNames = scriptNames || []
8 | this.currentScriptContent = null;
9 | this.addNotice = function (scriptName) {
10 | var scriptPath = files.join(files.getSdcardPath(), '脚本', scriptName + '.js')
11 | var scriptContent = files.read(scriptPath)
12 | var notice = ";(function () { var args = engines.myEngine().execArgv; var observer = args.observer; events.on(\"exit\", function () { log('exit event!'); observer.next(); });})();;"
13 | var tempScriptContent = scriptContent + notice
14 | this.currentScriptContent = tempScriptContent;
15 | }
16 | this.next = function () {
17 | if (scriptNames.length > 0) {
18 | var scriptName = this.scriptNames.shift()
19 | this.addNotice(scriptName)
20 | engines.execScript(scriptName, this.currentScriptContent, {
21 | arguments: {
22 | observer: this
23 | }
24 | })
25 | } else {
26 | return true
27 | }
28 | }
29 | }
30 |
31 |
32 | var scriptNames = ['1', '2', '3'];
33 | (new Observer(scriptNames)).next();
--------------------------------------------------------------------------------
/工具箱/脚本通信/ScriptEngine_emit通信/1.js:
--------------------------------------------------------------------------------
1 | //运行脚本
2 | var e = engines.execScriptFile("./2.js");
3 | //等待脚本启动
4 | sleep(2000);
5 | //向该脚本发送事件
6 | e.getEngine().emit("say", "你好");
7 |
--------------------------------------------------------------------------------
/工具箱/脚本通信/ScriptEngine_emit通信/2.js:
--------------------------------------------------------------------------------
1 | //监听say事件
2 | events.on("say", function(words){
3 | log('2号脚本打印开始')
4 | log(words)
5 | log('2号脚本打印结束')
6 | });
7 | //保持脚本运行
8 | setInterval(()=>{}, 1000);
9 |
--------------------------------------------------------------------------------
/工具箱/脚本通信/broadcast通信/先监听.js:
--------------------------------------------------------------------------------
1 |
2 | events.broadcast.on('hello',function(name){
3 | toastLog('你好'+name)
4 | })
5 | setInterval(()=>{},3000)
6 |
--------------------------------------------------------------------------------
/工具箱/脚本通信/broadcast通信/后发送.js:
--------------------------------------------------------------------------------
1 | events.broadcast.emit('hello','小明')
2 |
--------------------------------------------------------------------------------
/工具箱/脚本通信/engines通信/1.js:
--------------------------------------------------------------------------------
1 | // 这是启动方式为脚本引擎的通信方式
2 | var 大明星='周杰伦'
3 | engines.execScriptFile('./2.js',{
4 | arguments:{
5 | 大明星:大明星
6 | }
7 | })
8 |
--------------------------------------------------------------------------------
/工具箱/脚本通信/engines通信/2.js:
--------------------------------------------------------------------------------
1 | var args=engines.myEngine().execArgv;
2 | log('2号脚本打印开始')
3 | log(args)
4 | log(args.大明星)
5 | log('2号脚本打印结束')
6 |
--------------------------------------------------------------------------------
/工具箱/脚本通信/脚本结束事件.js:
--------------------------------------------------------------------------------
1 | events.on('exit', function () {
2 | log('我运行完了')
3 | })
4 | log(1)
5 |
--------------------------------------------------------------------------------
/工具箱/自动回复(双击版)316.js:
--------------------------------------------------------------------------------
1 | auto. waitFor();
2 | toast("请打开开聊天页面");
3 | function setAfter() {
4 | //消息列表
5 | var a = className("android.widget.ListView").findOne();
6 | var b = a.child(a.childCount() - 1).child(1).bounds();
7 | var c = a.child(a.childCount() - 1).child(1);
8 | if (b.centerX() < 530) {
9 | //双击最后一个消息
10 | press(c.bounds().centerX(), c.bounds().centerY(), 1)
11 | sleep(100)
12 | press(c.bounds().centerX(), c.bounds().centerY(), 1)
13 | var before = id("ann").findOne().text();
14 | back();
15 | var url = "http://www.tuling123.com/openapi/api";
16 | r = http.postJson(url, {
17 | key: "2b3a6919ce2645a2b08f673cdd9cda0d",
18 | info: before,
19 | userid: "1",
20 | });
21 | var textAfter = r.body.json().text;
22 | toastLog(textAfter)
23 | id("aie").findOne().click()
24 | setText("(๑• . •๑)自动回复(๑• . •๑)\n" + textAfter)
25 | click("发送")
26 | sleep(1000)
27 | }
28 | }
29 |
30 | while (1) {
31 | setAfter()
32 | }
--------------------------------------------------------------------------------
/工具箱/获取对象属性.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 功能: 获取对象属性
3 | */
4 | var me = Object('me')
5 | me.sister='littleGril'
6 | log(getAttr(me))
7 |
8 | function getAttr(obj) {
9 | var attrs = []
10 | for (var k in obj) {
11 | attrs.push(k)
12 | }
13 | attrs.sort()
14 | return attrs
15 | }
16 |
--------------------------------------------------------------------------------
/工具箱/读写@data目录文件379.js:
--------------------------------------------------------------------------------
1 | var path = '/data/user/0/com.tencent.mobileqq/guid'
2 | r = readFile(path)
3 | log(r)
4 | writeFile(path, 'dsfsfdsafasfds')
5 | r = readFile(path)
6 | log(r)
7 |
8 | function readFile(path) {
9 | var sh = new Shell(true);
10 | var tempFile = '/sdcard/temp.txt'
11 | sh.exec('cat ' + path + '> ' + tempFile)
12 | sh.exitAndWaitFor()
13 | return files.read(tempFile)
14 | }
15 |
16 | function writeFile(path, content) {
17 | var tempFile = '/sdcard/temp.txt'
18 | files.createWithDirs(tempFile)
19 | files.write(tempFile, content)
20 | var sh = new Shell(true);
21 | sh.exec('cat ' + tempFile + ' > ' + path)
22 | sh.exitAndWaitFor()
23 | }
24 |
--------------------------------------------------------------------------------
/工具箱/调整手机音量402.js:
--------------------------------------------------------------------------------
1 | var am = context.getSystemService(context.AUDIO_SERVICE)
2 | // STREAM_MUSIC这个自己试试,是调整那种音量,范围0-6 自己试试,我也不知道
3 | var STREAM_MUSIC = 0
4 | // 1 增大音量 -1 降低音量
5 | var ADJUST_RAISE = -1
6 | // 1 显示调整音量界面 0 不显示界面
7 | var FLAG_SHOW_UI = 1
8 | am.adjustStreamVolume(STREAM_MUSIC, ADJUST_RAISE, FLAG_SHOW_UI)
9 |
--------------------------------------------------------------------------------
/工具箱/马冬梅.js:
--------------------------------------------------------------------------------
1 | var count = function () {
2 | var count = 6
3 | return function () {
4 | return count++;
5 | }
6 | }()
7 |
8 | function thread(text, count) {
9 | threads.start(
10 | function () {
11 | for (let i = 0; i < 100; i++) {
12 | toastAt(text, 366, count * 100)
13 | sleep(20)
14 | }
15 | }
16 | )
17 | }
18 |
19 | function toastAt(msg, x, y) {
20 | ui.run(() => toastAt0(msg, x, y));
21 | }
22 |
23 | function toastAt0(msg, x, y) {
24 | importClass(android.widget.Toast);
25 | importClass(android.view.Gravity);
26 | var toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
27 | toast.setGravity(Gravity.TOP | Gravity.LEFT, x, y);
28 | toast.show();
29 | }
30 | thread('马', count())
31 | thread('冬', count())
32 | thread('梅', count())
33 |
--------------------------------------------------------------------------------
/广播/发射广播362.js:
--------------------------------------------------------------------------------
1 | // 发送广播: android.intent.action.激活路飞
2 | var action="android.intent.action.激活路飞"
3 | app.sendBroadcast(
4 | {
5 | action:action,
6 | extras:{
7 | name:'哦雷瓦路飞',
8 | dream:'One Piece'
9 | }
10 | }
11 | );
12 | log('发送了广播',action)
13 |
--------------------------------------------------------------------------------
/广播/打印广播Intent信息232.js:
--------------------------------------------------------------------------------
1 | let intent = engines.myEngine().execArgv.intent;
2 | if(intent == null){
3 | toastLog("请使用定时任务运行此脚本");
4 | exit();
5 | }
6 | log("action = ", intent.action);
7 | log("package = ", intent.package);
8 | log("data = ", intent.data);
9 | let extras = intent.extras;
10 | if (extras) {
11 | let str = "{\n";
12 | let iter = extras.keySet().iterator();
13 | while (iter.hasNext()) {
14 | let key = iter.next();
15 | let value = extras.get(key);
16 | str += " " + key + ": " + value;
17 | str += ", \n";
18 | }
19 | str += "}";
20 | log(str);
21 | }
--------------------------------------------------------------------------------
/微信/root打开朋友圈.js:
--------------------------------------------------------------------------------
1 | //要root才能打开朋友圈
2 | var activity = "com.tencent.mm/com.tencent.mm.plugin.sns.ui.SnsTimeLineUI"
3 | shell("am start -n " + activity, true);
4 |
--------------------------------------------------------------------------------
/悬浮窗/UI和悬浮窗一起使用的完整栗子/main.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: 悬浮窗和ui一起使用的例子
5 | */
6 |
7 | "ui";
8 | require('./浏览器窗口.js')
9 | threads.start(
10 | function(){
11 | require('./小红点悬浮球.js')
12 | }
13 | )
14 |
15 |
--------------------------------------------------------------------------------
/悬浮窗/UI和悬浮窗一起使用的完整栗子/view点击事件.js:
--------------------------------------------------------------------------------
1 | var 悬控移动和点击=require('./悬控移动和点击.js')
2 | function View点击事件(window,viewName,view,clickAction){
3 | this.window=window
4 | this.name=viewName
5 | this.view=view
6 | var 默认点击动作=()=>{
7 | toast(this.name+'被点了')
8 | }
9 | this.clickAction = 默认点击动作
10 | if(clickAction){
11 | this.clickAction = clickAction
12 | 悬控移动和点击(window,viewName,view,clickAction)
13 | }
14 | }
15 | View点击事件.prototype.setClickAction=function(clickAction){
16 | this.clickAction=function (){
17 | 悬控移动和点击(window,viewName,view,clickAction)
18 | }
19 | }
20 |
21 | module.exports=View点击事件
22 |
--------------------------------------------------------------------------------
/悬浮窗/UI和悬浮窗一起使用的完整栗子/window在屏幕之内.js:
--------------------------------------------------------------------------------
1 | function window在屏幕之内(window){
2 | var x=window.getX()
3 | var y=window.getY()
4 | var w=window.getWidth()
5 | var h=window.getHeight()
6 | var centerX=x+w/2
7 | var centerY=y+h/2
8 | if(centerX>0 && centerX0 && centerY 2000) {
29 | log('控制台在%sms之内没有加载出来', spendTime)
30 | alert('控制台在%sms之内没有加载出来', spendTime)
31 | exit()
32 | }
33 | }
34 | }
35 | )
36 |
37 | }
38 |
39 |
40 |
41 | var 多线程控制悬浮窗={}
42 | 多线程控制悬浮窗.隐藏或显示=多线程控制悬浮窗隐藏或显示
43 | module.exports=多线程控制悬浮窗
44 |
--------------------------------------------------------------------------------
/悬浮窗/UI和悬浮窗一起使用的完整栗子/带属性的悬浮窗.js:
--------------------------------------------------------------------------------
1 | var View点击事件=require('./View点击事件.js')
2 |
3 | function 带属性的悬浮窗(windowName,window){
4 | this.name=windowName
5 | this.window=window
6 | }
7 | 带属性的悬浮窗.prototype.setViewClickAction=function(viewName,view,clickAction){
8 | log("带属性的悬浮窗.prototype.setViewClickAction=function(viewName,view,clickAction){")
9 | log(viewName)
10 | log(view)
11 | log(clickAction)
12 | var window=this.window
13 | var 添加了点击事件的view=new View点击事件(window,viewName,view,clickAction)
14 | log('setViewClickAction已设置-->'+viewName)
15 | return viewName
16 | }
17 |
18 | module.exports=带属性的悬浮窗
19 |
--------------------------------------------------------------------------------
/悬浮窗/UI和悬浮窗一起使用的完整栗子/悬浮窗输入框.js:
--------------------------------------------------------------------------------
1 | var window = floaty.window(
2 |
3 |
4 |
5 |
6 | );
7 |
8 | window.exitOnClose();
9 |
10 | toast("长按确定键可调整位置");
11 |
12 | window.input.on("key", function(keyCode, event){
13 | log('keyCode=',keyCode)
14 | if(event.getAction() == event.ACTION_DOWN && keyCode == keys.back){
15 | window.disableFocus();
16 | event.consumed = true;
17 | }
18 | });
19 |
20 | window.input.on("touch_down", ()=>{
21 | window.requestFocus();
22 | window.input.requestFocus();
23 | });
24 |
25 | window.ok.on("click", ()=>{
26 | toast("傻瓜! " + window.input.text());
27 | window.disableFocus();
28 | });
29 |
30 | window.ok.on("long_click", ()=>{
31 | window.setAdjustEnabled(!window.isAdjustEnabled());
32 | });
33 |
34 | setInterval(()=>{}, 1000);
35 |
--------------------------------------------------------------------------------
/悬浮窗/flash.js:
--------------------------------------------------------------------------------
1 | //导入模块
2 | function 导入常用函数模块(){
3 | var url='https://raw.githubusercontent.com/snailuncle/autojsDemo/master/autojsCommonFunctions.js'
4 | var r = http.get(url)
5 | log("code = " + r.statusCode);
6 | var html=r.body.bytes()
7 | files.write('./autojsCommonFunctions.js','')
8 | files.writeBytes('./autojsCommonFunctions.js',html)
9 | var common=require('./autojsCommonFunctions.js')
10 | return common
11 | }
12 | var common=导入常用函数模块()
13 | log(common)
14 | for(let i=0;i<33;i++){
15 | common.闪光弹('fire in the hole')
16 | }
17 |
--------------------------------------------------------------------------------
/悬浮窗/悬浮时间268.js:
--------------------------------------------------------------------------------
1 | var window = floaty.rawWindow(
2 |
3 |
4 |
5 |
6 | );
7 |
8 | window.setTouchable(false);
9 | window.setPosition(100,100);
10 |
11 |
12 |
13 | setInterval(() => {
14 | ui.run(() => {
15 | window.text.setText(String(getTime()));
16 | });
17 |
18 | }, 50);
19 |
20 | function getTime() {
21 | var date = new Date();
22 | var year = date.getFullYear();
23 | var month = TT(date.getMonth() + 1);
24 | var day = TT(date.getDate());
25 | var hour = TT(date.getHours());
26 | var minute = TT(date.getMinutes());
27 | var second = TT(date.getSeconds());
28 | var millisecond = TT(date.getMilliseconds());
29 | return year + "/" + month + "/" + day + "--" + hour + ":" + minute + ":" + second;
30 |
31 | function TT(s) {
32 | if (s < 10) {
33 | s = "0" + s;
34 | };
35 | return s;
36 | };
37 | };
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗下拉框.js:
--------------------------------------------------------------------------------
1 | var w = floaty.rawWindow(
2 |
3 | 悬浮文字
4 |
5 |
6 | 下拉菜单
7 |
8 |
9 |
10 |
11 | );
12 | w.setPosition(500, 500);
13 |
14 |
15 |
16 | w.sp1.on("key", function(keyCode, event){
17 | if(event.getAction() == event.ACTION_DOWN && keyCode == keys.back){
18 | w.disableFocus();
19 | event.consumed = true;
20 | }
21 | });
22 |
23 | w.sp1.on("touch_down", ()=>{
24 | w.requestFocus();
25 | w.sp1.requestFocus();
26 | });
27 |
28 | setTimeout(() => {
29 | w.close();
30 | }, 5000);
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗单位px.js:
--------------------------------------------------------------------------------
1 | 'ui';
2 | ui.layout(
3 |
4 |
5 |
6 | )
7 |
8 |
9 | log(context.getResources().getDisplayMetrics().density)
10 |
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗和UI一起使用的例子/main.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: 家
3 | * QQ: 203118908
4 | * 功能: 悬浮窗和ui一起使用的例子
5 | */
6 |
7 | "ui";
8 | require('./浏览器窗口.js')
9 | threads.start(
10 | function(){
11 | require('./小红点悬浮球.js')
12 | }
13 | )
14 |
15 |
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗和UI一起使用的例子/view点击事件.js:
--------------------------------------------------------------------------------
1 | var 悬控移动和点击=require('./悬控移动和点击.js')
2 | function View点击事件(window,viewName,view,clickAction){
3 | this.window=window
4 | this.name=viewName
5 | this.view=view
6 | var 默认点击动作=()=>{
7 | toast(this.name+'被点了')
8 | }
9 | this.clickAction = 默认点击动作
10 | if(clickAction){
11 | this.clickAction = clickAction
12 | 悬控移动和点击(window,viewName,view,clickAction)
13 | }
14 | }
15 | View点击事件.prototype.setClickAction=function(clickAction){
16 | this.clickAction=function (){
17 | 悬控移动和点击(window,viewName,view,clickAction)
18 | }
19 | }
20 |
21 | module.exports=View点击事件
22 |
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗和UI一起使用的例子/window在屏幕之内.js:
--------------------------------------------------------------------------------
1 | function window在屏幕之内(window){
2 | var x=window.getX()
3 | var y=window.getY()
4 | var w=window.getWidth()
5 | var h=window.getHeight()
6 | var centerX=x+w/2
7 | var centerY=y+h/2
8 | if(centerX>0 && centerX0 && centerY 2000) {
29 | log('控制台在%sms之内没有加载出来', spendTime)
30 | alert('控制台在%sms之内没有加载出来', spendTime)
31 | exit()
32 | }
33 | }
34 | }
35 | )
36 |
37 | }
38 |
39 |
40 |
41 | var 多线程控制悬浮窗={}
42 | 多线程控制悬浮窗.隐藏或显示=多线程控制悬浮窗隐藏或显示
43 | module.exports=多线程控制悬浮窗
44 |
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗和UI一起使用的例子/带属性的悬浮窗.js:
--------------------------------------------------------------------------------
1 | var View点击事件=require('./View点击事件.js')
2 |
3 | function 带属性的悬浮窗(windowName,window){
4 | this.name=windowName
5 | this.window=window
6 | }
7 | 带属性的悬浮窗.prototype.setViewClickAction=function(viewName,view,clickAction){
8 | log("带属性的悬浮窗.prototype.setViewClickAction=function(viewName,view,clickAction){")
9 | log(viewName)
10 | log(view)
11 | log(clickAction)
12 | var window=this.window
13 | var 添加了点击事件的view=new View点击事件(window,viewName,view,clickAction)
14 | log('setViewClickAction已设置-->'+viewName)
15 | return viewName
16 | }
17 |
18 | module.exports=带属性的悬浮窗
19 |
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗日志.js:
--------------------------------------------------------------------------------
1 | let w = floaty.rawWindow(
2 |
3 |
4 |
5 | );
6 | w.setSize(-1, -1);
7 | w.setTouchable(false);
8 | ui.run(() => {
9 | w.ConS.setConsole(org.autojs.autojs.autojs.AutoJs.getInstance().getGlobalConsole());
10 | w.ConS.findViewById(org.autojs.autojs.R.id.input_container).setVisibility(android.view.View.GONE);
11 | });
12 | threads.start(function() {
13 | let a = 0;
14 | while (true) {
15 | // log(a++);
16 | sleep(1000);
17 | };
18 | })
19 |
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗脚本列表.js173.js:
--------------------------------------------------------------------------------
1 | ui.run(function() {
2 | importPackage(org.autojs.autojs.ui.explorer);
3 | importPackage(org.autojs.autojs.model.explorer);
4 | var explorerView = new ExplorerView(new android.view.ContextThemeWrapper(context, org.autojs.autojs.R.style.AppTheme));
5 | explorerView.setExplorer(Explorers.workspace(), ExplorerDirPage.createRoot("/sdcard/脚本"));
6 | explorerView.setDirectorySpanSize(2);
7 | var dialog = new org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder(context)
8 | .title("运行脚本")
9 | .customView(explorerView, false)
10 | .positiveText("取消")
11 | .build();
12 | explorerView.setOnItemOperatedListener(function(file) {
13 | dialog.dismiss();
14 | });
15 | explorerView.setOnItemClickListener(function(view, item) {
16 | org.autojs.autojs.model.script.Scripts.run(item.toScriptFile())
17 | });
18 | com.stardust.app.DialogUtils.showDialog(dialog);
19 | });
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗计数器172.js:
--------------------------------------------------------------------------------
1 | var loging = floaty.window(
2 |
3 |
4 | 脚本启动中
5 |
6 |
7 |
8 | )
9 | ui.run(() => {
10 | loging.setPosition(170, 1074)
11 | })
12 |
13 | _log = log
14 |
15 | function log(text) {
16 | if (loging) {
17 | ui.run(() => {
18 | loging.log.text(text)
19 | })
20 | }
21 | }
22 | var on = threads.start(function() {
23 | loging.log.on("click", () => {
24 | toast("已隐藏日志悬浮窗")
25 | loging.close()
26 | })
27 | loging.stop.on("click", () => {
28 | engines.stopAll()
29 | })
30 | })
31 | fn=function (){
32 | var c=0
33 | return ()=>{
34 | log(c.toString())
35 | return (++c)
36 | }
37 | }()
38 | setInterval(fn,1000)
39 |
--------------------------------------------------------------------------------
/悬浮窗/悬浮窗隐藏控件.js:
--------------------------------------------------------------------------------
1 | var window=floaty.rawWindow(
2 |
3 |
5 | 生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒生僻字大佬真棒
6 |
7 |
8 |
9 | )
10 | window.setPosition(300,300)
11 | var view = window.main
12 | function scrollX(view, x) {
13 | view.scrollTo(x, 0)
14 | }
15 | var num = function () {
16 | var count = 0
17 | return function () {
18 | return count++;
19 | }
20 | }()
21 | var intervalId;
22 | var fn = () => {
23 | var n=num()
24 | scrollX(view, n)
25 | var width=view.getWidth()
26 | if(n>width/3*2){
27 | clearInterval(intervalId)
28 | }
29 | }
30 | setTimeout(() => {
31 | intervalId=setInterval(
32 | fn, 3
33 | )
34 | }, 1000);
35 |
36 | setInterval(()=>{},3000)
37 |
--------------------------------------------------------------------------------
/悬浮窗/按钮平分.js:
--------------------------------------------------------------------------------
1 |
2 | var window=floaty.window(
3 |
4 |
5 |
6 |
7 |
8 |
9 | )
10 | setInterval(()=>{},3000)
11 |
12 |
--------------------------------------------------------------------------------
/悬浮窗/焦点.js:
--------------------------------------------------------------------------------
1 | var window = floaty.window(
2 |
3 |
4 |
5 |
6 | );
7 |
8 | window.exitOnClose();
9 |
10 | toast("长按确定键可调整位置");
11 |
12 | window.input.on("key", function(keyCode, event){
13 | if(event.getAction() == event.ACTION_DOWN && keyCode == keys.back){
14 | window.disableFocus();
15 | event.consumed = true;
16 | }
17 | });
18 |
19 | window.input.on("touch_down", ()=>{
20 | window.requestFocus();
21 | window.input.requestFocus();
22 | });
23 |
24 | window.ok.on("click", ()=>{
25 | toast("傻瓜! " + window.input.text());
26 | window.disableFocus();
27 | });
28 |
29 | window.ok.on("long_click", ()=>{
30 | window.setAdjustEnabled(!window.isAdjustEnabled());
31 | });
32 |
33 | setInterval(()=>{}, 1000);
34 |
--------------------------------------------------------------------------------
/手势/小米锁屏解锁.js:
--------------------------------------------------------------------------------
1 | var password='8888'
2 | if(!device.isScreenOn()){
3 | device.wakeUpIfNeeded()
4 | }
5 | sleep(2000)
6 | 小米锁屏上滑动作()
7 | sleep(300)
8 | for(var i=0;i
3 | app.startActivity({
4 | action:"CALL",
5 | data: "tel:10010"
6 | });
7 |
8 |
9 | /*var intent1=app.intent({
10 | action:"intent.ACTION_CALL",
11 | data: "tel:10010"
12 | })
13 | app.startActivity(intent1);
14 |
15 | */
16 |
--------------------------------------------------------------------------------
/手机/全部短信获取144.js:
--------------------------------------------------------------------------------
1 | importClass(android.net.Uri);
2 | console.show();
3 | SMS_INBOX = Uri.parse("content://sms/");
4 | 短信=getSmsFromPhone();
5 | for(i in 短信){
6 | log(短信[i]);
7 | }
8 | function getSmsFromPhone() {
9 | var cr = context.getContentResolver();
10 | var projection = [
11 | "_id",
12 | "address",
13 | "person",
14 | "body",
15 | "date",
16 | "type"
17 | ];
18 | var cur = cr.query(SMS_INBOX, projection, null, null, "date desc");//此处报错是因为系统没允许autojs读取短信
19 | if (null == cur) {
20 | log("************cur == null");
21 | return;
22 | }
23 | var i=0;
24 | var sms=[];
25 |
26 | while (cur.moveToNext()) {
27 | sms[i]={
28 | number:cur.getString(cur.getColumnIndex("address")),
29 | name:cur.getString(cur.getColumnIndex("person")),
30 | body:cur.getString(cur.getColumnIndex("body")),
31 | }
32 | i++;
33 | //至此就获得了短信的相关的内容, 以下是把短信加入map中,构建listview,非必要。
34 | }
35 | return sms;
36 | }
--------------------------------------------------------------------------------
/手机/判断屏幕是否锁定.js:
--------------------------------------------------------------------------------
1 | // 判断屏幕是否锁定
2 | // 返回 true 表示锁定
3 | function isScreenLocked() {
4 | let km = context.getSystemService("keyguard");
5 | return km.inKeyguardRestrictedInputMode();
6 | };
--------------------------------------------------------------------------------
/手机/发短信2.js:
--------------------------------------------------------------------------------
1 | importPackage(android.app);
2 | importPackage(android.content);
3 | importPackage(android.net);
4 | importPackage(android.os);
5 | importPackage(android.view);
6 | //importClass(android.app.PendingIntent);
7 | importClass(android.content.Intent);
8 | importClass(android.telephony.SmsManager);
9 | importClass(android.widget.EditText);
10 | importClass(android.widget.Toast);
11 |
12 | //android.app.PendingIntent;
13 | //android.content.Intent;
14 | //var tt= bb.getActivity(this,0,cc,0);
15 | //var pendingIntent= PendingIntent.getActivity(this,0, new Intent(), 0);
16 | // PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(), 0);
17 |
18 | //可以发信息了。一毛
19 | // smsManager.sendTextMessage(number.getText().toString(), null,
20 | // smsContent.getText().toString(), pendingIntent, null);
21 | var smsManager = android.telephony.SmsManager.getDefault();
22 |
23 | //var smsManager=new SmsManager();
24 | smsManager.sendTextMessage("13620748245", null,
25 | "wangyj ceshi", null, null);
26 | // Toast.makeText(this, "SMS Send Finished.", Toast.LENGTH_LONG).show();
27 |
--------------------------------------------------------------------------------
/手机/开发者选项-指针位置116.js:
--------------------------------------------------------------------------------
1 | // 此脚本可以切换开发者选项中的显示指针位置
2 | // 感谢 @家 指点如何打开开发者选项
3 |
4 | auto.waitFor();
5 | app.startActivity({
6 | action: "android.intent.action.VIEW", //此处可为其他值
7 | packageName: "com.android.settings",
8 | className: "com.android.settings.Settings$DevelopmentSettingsActivity"
9 | //此处可以加入其他内容,如data、extras
10 | });
11 | sleep(200);
12 | while (!textContains("指针位置").exists()) {
13 | //sleep(50);
14 | scrollDown();
15 | sleep(100);
16 | }
17 | var zz = textContains("指针位置").findOne(5000);
18 | if (zz) {
19 | a = click("指针位置");
20 | toastLog("指针位置切换成功:" + a);
21 | back();
22 | }
--------------------------------------------------------------------------------
/手机/开发者选项指针位置.js:
--------------------------------------------------------------------------------
1 | // 此脚本可以切换开发者选项中的显示指针位置
2 | // 感谢 @家 指点如何打开开发者选项
3 |
4 | auto.waitFor();
5 | app.startActivity({
6 | action: "android.intent.action.VIEW", //此处可为其他值
7 | packageName: "com.android.settings",
8 | className: "com.android.settings.Settings$DevelopmentSettingsActivity"
9 | //此处可以加入其他内容,如data、extras
10 | });
11 | sleep(200);
12 | while (!textContains("指针位置").exists()) {
13 | //sleep(50);
14 | scrollDown();
15 | sleep(100);
16 | }
17 | var zz = textContains("指针位置").findOne(5000);
18 | if (zz) {
19 | a = click("指针位置");
20 | toastLog("指针位置切换成功:" + a);
21 | back();
22 | }
23 |
--------------------------------------------------------------------------------
/手机/播放系统提示音.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | playRingtone();
4 |
5 | function playRingtone() {
6 | let Uri = android.net.Uri;
7 | let RingtoneManager = android.media.RingtoneManager;
8 | let uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
9 | let rt = RingtoneManager.getRingtone(context, uri);
10 | rt.play();
11 | }
--------------------------------------------------------------------------------
/手机/无限震动.js:
--------------------------------------------------------------------------------
1 | importClass(android.os.Vibrator);
2 | importPackage(android.content)
3 | var vibrator = context.getSystemService(Context.VIBRATOR_SERVICE);
4 | // log(vibrator.vibrate.toString())
5 | log('开始震动')
6 | vibrator.vibrate([1,1000000000], 0);
7 | setTimeout(
8 | function(){
9 | vibrator.cancel();
10 | log('结束震动')
11 | },1000*60
12 | )
13 |
--------------------------------------------------------------------------------
/手机/查看wifi状态.js:
--------------------------------------------------------------------------------
1 | importPackage(android.content);
2 | let wifiManager = context.getSystemService(Context.WIFI_SERVICE);
3 | getCurrentWifiStateState(wifiManager)
4 | function getCurrentWifiStateState(wifiManager) {
5 | if (wifiManager.isWifiEnabled()){
6 | alert('打开状态')
7 | }else{
8 | alert('关闭状态')
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/手机/横竖屏.js:
--------------------------------------------------------------------------------
1 | //1竖屏 2横屏
2 |
3 | function getScreenDirection() {
4 | importPackage(android.content);
5 | return context.getResources().getConfiguration().orientation;
6 | }
--------------------------------------------------------------------------------
/手机/添加联系人.js:
--------------------------------------------------------------------------------
1 | var it = new Intent(Intent.ACTION_INSERT, android.net.Uri.withAppendedPath(
2 | app.parseUri("content://com.android.contacts"), "contacts"))
3 | ;
4 | it.setType("vnd.android.cursor.dir/person");
5 |
6 | // 联系人姓名
7 | it.putExtra(android.provider.ContactsContract.Intents.Insert.NAME, '陈真');
8 |
9 | // 手机号码
10 | it.putExtra(android.provider.ContactsContract.Intents.Insert.PHONE,
11 | '13570334567');
12 | // 单位电话
13 | it.putExtra(
14 | android.provider.ContactsContract.Intents.Insert.SECONDARY_PHONE,
15 | '13570334567');
16 | // 住宅电话
17 | it.putExtra(
18 | android.provider.ContactsContract.Intents.Insert.TERTIARY_PHONE,
19 | '13570334567');
20 |
21 | app.startActivity(it);
22 |
23 |
24 | sleep(2000);
25 | var descbtn = desc('确定').findOne(2000);
26 | if(descbtn!=null)
27 | {
28 | toast('要保存 了');
29 | descbtn.click();
30 | sleep(1000);
31 | back();
32 |
33 | }
34 | else{
35 | toast('找不到确定按钮');
36 | }
37 |
38 |
39 |
--------------------------------------------------------------------------------
/手机/直接打开开发者模式.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 直接打开开发者模式
3 | * 我是用来选择直接进入系统的, 这样亮屏之后就不用滑动解锁了
4 | * 作者: 稻草人, 家
5 | */
6 |
7 | importClass(android.app.Activity)
8 | importClass(android.content.ComponentName)
9 | importClass(android.content.Intent)
10 | importClass(android.os.Bundle)
11 |
12 | componentName = new ComponentName("com.android.settings", "com.android.settings.DevelopmentSettings");
13 | intent = new Intent();
14 | intent.setComponent(componentName);
15 | intent.setAction("android.intent.action.View");
16 | context.startActivity(intent);
--------------------------------------------------------------------------------
/手机/花500买的_联系人_短信_日历_通话记录/短信/发短信.js:
--------------------------------------------------------------------------------
1 | importClass(android.net.Uri);
2 | importClass(android.content.ContentValues);
3 | //轮子地址
4 | //https://blog.csdn.net/alittleforward/article/details/40949669
5 |
6 |
7 | var values = new ContentValues();
8 | values.put("address", "10010");
9 | //1为收 2为发
10 | values.put("type", "2");
11 | //阅读状态,0未读1已读
12 | values.put("read", "0");
13 | values.put("body", "我发了一条短信");
14 | values.put("person", "test");
15 | context.getApplicationContext().getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
--------------------------------------------------------------------------------
/手机/花500买的_联系人_短信_日历_通话记录/短信/收短信.js:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | 作者: 弦鱼
4 | */
5 | importClass(android.net.Uri);
6 | importClass(android.content.ContentValues);
7 | //轮子地址
8 | //https://blog.csdn.net/shaohuawuxian/article/details/84487208
9 |
10 | var values = new ContentValues();
11 | values.put("address", "1856680");
12 | values.put("type", "1");
13 | values.put("read", "0");
14 | values.put("body", "我收到一条短信");
15 | values.put("person", "test");
16 | context.getApplicationContext().getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
17 |
18 | 这个短信 设置为未读 怎么才能想正常短信未读一样 在通知栏提醒一下?
--------------------------------------------------------------------------------
/手机/花500买的_联系人_短信_日历_通话记录/短信/读短信.js:
--------------------------------------------------------------------------------
1 | importClass(android.net.Uri);
2 |
3 | //轮子地址
4 | //https://blog.csdn.net/adminlxb89/article/details/81068419
5 |
6 |
7 | var SMS_INBOX = Uri.parse("content://sms/");
8 | var cr = context.getApplicationContext().getContentResolver();
9 | var projection = ["_id", "address", "person", "body", "date", "type"]
10 | var cur = cr.query(SMS_INBOX, projection, null, null, "date desc");
11 |
12 | while (cur.moveToNext()) {
13 | var number = cur.getString(cur.getColumnIndex("address")); //手机号
14 | var body = cur.getString(cur.getColumnIndex("body")); //短信内容
15 | log(number + ":" + body)
16 | }
--------------------------------------------------------------------------------
/手机/花500买的_联系人_短信_日历_通话记录/通讯录增删改查/读取通讯录.js:
--------------------------------------------------------------------------------
1 | importClass(android.provider.ContactsContract);
2 | //自己照着轮子写的
3 | //https://m.jb51.net/article/143106.htm
4 |
5 | var cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
6 | while (cursor.moveToNext()) {
7 | //获取联系人姓名
8 | var displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
9 | //获取联系人手机号
10 | var number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
11 | //把取出的两类数据进行拼接
12 | log(displayName + ":" + number);
13 | }
--------------------------------------------------------------------------------
/手机/花500买的_联系人_短信_日历_通话记录/通话记录/插入通话记录.js:
--------------------------------------------------------------------------------
1 | importClass(android.Manifest);
2 | importClass(java.lang.System);
3 | importClass(android.provider.CallLog);
4 | importClass(android.content.ContentValues);
5 |
6 | var permissionList = [Manifest.permission.READ_CALL_LOG, Manifest.permission.WRITE_CALL_LOG]
7 | /**
8 | * 插入一条通话记录
9 | * @param number 通话号码
10 | * @param duration 通话时长(响铃时长)以秒为单位 1分30秒则输入90
11 | * @param type 通话类型 1呼入 2呼出 3未接
12 | * @param isNew 是否已查看 0已看1未看
13 | 轮子地址
14 | https://blog.csdn.net/m940034240/article/details/77237301/
15 | */
16 |
17 | var number = 1554563;
18 | var duration = 99;
19 | var type = 1;
20 | var isNew = 1;
21 | //因为字符串类型,所以需要toString()
22 | var values = new ContentValues();
23 | values.put(CallLog.Calls.NUMBER, number.toString());
24 | values.put(CallLog.Calls.DATE, System.currentTimeMillis().toString());
25 | values.put(CallLog.Calls.DURATION, duration.toString());
26 | values.put(CallLog.Calls.TYPE, type.toString());
27 | values.put(CallLog.Calls.NEW, isNew.toString());
28 |
29 | context.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
--------------------------------------------------------------------------------
/手机/获取wifi信息.js:
--------------------------------------------------------------------------------
1 | wifi = context .getSystemService("wifi");
2 | info = wifi.getConnectionInfo();
3 | log(info.getMacAddress());
4 |
5 |
6 |
7 | var MAC_ADDR = shell("ifconfig |grep 'wlan0'");
8 |
9 | log(MAC_ADDR);
10 |
11 |
12 | importClass(android.net.wifi.WifiManager);
13 | importClass(android.net.wifi.WifiInfo);
14 | function getMac(context){
15 | var wifi = context.getSystemService(context.WIFI_SERVICE);
16 | var info = wifi.getConnectionInfo();
17 | return info.getMacAddress();
18 | }
19 | log(getMac(context))
20 |
--------------------------------------------------------------------------------
/手机/获取手机桌面壁纸.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | importClass(android.app.WallpaperManager)
3 |
4 | ui.layout(
5 |
6 |
7 |
8 | );
9 |
10 | var Manager = WallpaperManager.getInstance(context);
11 | var Q = Manager.getDrawable();
12 | ui.run(() => {
13 | ui.img.setImageBitmap(Q.bitmap);
14 | });
15 |
--------------------------------------------------------------------------------
/手机/获取通讯录.js:
--------------------------------------------------------------------------------
1 | /**
2 | *Usedfor: Auto.js Pro
3 | *Author: Hyun Mai QQ:2668649892
4 | *Features: 读取通讯录联系人
5 | *Tips: 请先允许读取通讯录权限
6 | */
7 |
8 |
9 | importClass(android.database.Cursor);
10 |
11 | var cursor = context.getContentResolver().query(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
12 | while (cursor.moveToNext()) {
13 | //读取通讯录的姓名
14 | var name = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
15 | //读取通讯录的号码
16 | var number = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER));
17 | if (name != number) {
18 | log("[名字]:" + name + " [号码]:" + number);
19 | } else {
20 | log("[号码]:" + number);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/手机/调整屏幕亮度.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 作者: ProjectXero
3 | * 功能: 调整屏幕亮度
4 | * 备注: screenBrightness=0 0最暗 1最亮
5 | */
6 |
7 | var w = floaty.rawWindow(
8 |
9 | );
10 | w.setSize(-1, -1);
11 | w.setTouchable(false);
12 | log(w.main.getRootView().getLayoutParams().screenBrightness=0);
13 | setTimeout(()=>{ w.close(); }, 4000);
14 |
--------------------------------------------------------------------------------
/手机/铃声.js:
--------------------------------------------------------------------------------
1 | function 铃声(铃声类型, 是否循环播放, 播放时长) {
2 | var 播放时长 = 播放时长 || 10000
3 | var 是否循环播放 = 是否循环播放 || false
4 | if (是否循环播放) {
5 | 播放时长 = 666 * 1000
6 | }
7 | var 铃声选择结果 = android.media.RingtoneManager.TYPE_NOTIFICATION
8 | switch (铃声类型) {
9 | case 0:
10 | 铃声选择结果 = android.media.RingtoneManager.TYPE_RINGTONE
11 | break;
12 | case 1:
13 | 铃声选择结果 = android.media.RingtoneManager.TYPE_ALARM
14 | break;
15 | case 2:
16 | 铃声选择结果 = android.media.RingtoneManager.TYPE_ALL
17 | break;
18 | default:
19 | break;
20 | }
21 | var mp = new android.media.MediaPlayer();
22 | mp.setDataSource(context, android.media.RingtoneManager.getDefaultUri(铃声选择结果));
23 | if (是否循环播放) mp.setLooping(true);
24 | mp.prepare();
25 | mp.start();
26 | threads.start(function () {
27 | sleep(播放时长)
28 | if (mp.isPlaying()) {
29 | mp.stop()
30 | }
31 | });
32 | return mp;
33 | }
34 | 铃声(0)
35 |
--------------------------------------------------------------------------------
/手机/高级输入法.js:
--------------------------------------------------------------------------------
1 | var window = floaty.window(
2 |
3 | );
4 |
5 | for (var i = 0; i < 50; i++) {
6 | ui.run(() => {
7 | imm = window.text.getContext().getSystemService(context.INPUT_METHOD_SERVICE);
8 | imm.toggleSoftInput(0, android.view.inputmethod.InputMethodManager.SHOW_FORCED);
9 | });
10 | sleep(100);
11 | };
12 |
--------------------------------------------------------------------------------
/数组/1求交集222.js:
--------------------------------------------------------------------------------
1 | Array.intersect = function () {
2 | var result = new Array();
3 | var obj = {};
4 | for (var i = 0; i < arguments.length; i++) {
5 | for (var j = 0; j < arguments[i].length; j++) {
6 | var str = arguments[i][j];
7 | if (!obj[str]) {
8 | obj[str] = 1;
9 | } else {
10 | obj[str]++;
11 | if (obj[str] == arguments.length) {
12 | result.push(str);
13 | }
14 | } //end else
15 | } //end for j
16 | } //end for i
17 | return result;
18 | }
19 | 当前页面所有文字列表 = [
20 | '13491',
21 | '邀请码',
22 | '13491'
23 | ]
24 | 当前页文字列表 = [
25 | '点此登录',
26 | '我的金币'
27 | ]
28 | var 交集 = Array.intersect(当前页文字列表, 当前页面所有文字列表)
29 | log(交集)
30 |
--------------------------------------------------------------------------------
/数组/大数组包含小数组.js:
--------------------------------------------------------------------------------
1 | function bigArrContainsSmallArr(bigArr, smallArr) {
2 | //对于重复的元素采用计数的方式对比
3 | var bigArrObj = {}
4 | var smallArrObj = {}
5 | for (let i = 0; i < bigArr.length; i++) {
6 | var has = bigArrObj.hasOwnProperty(bigArr[i])
7 | if (has) {
8 | bigArrObj[bigArr[i]]++;
9 | } else {
10 | bigArrObj[bigArr[i]] = 1
11 | }
12 | }
13 | for (let i = 0; i < smallArr.length; i++) {
14 | var has = smallArrObj.hasOwnProperty(smallArr[i])
15 | if (has) {
16 | smallArrObj[smallArr[i]]++;
17 | } else {
18 | smallArrObj[smallArr[i]] = 1
19 | }
20 | }
21 | for (var k in smallArrObj) {
22 | if (bigArrObj.hasOwnProperty(k) && bigArrObj[k] >= smallArrObj[k]) {} else {
23 | return false
24 | }
25 | }
26 | return true
27 | }
28 |
29 | var bigArr=[1,2,3,4,11]
30 | var smallArr=[1,1,2,3,4,11]
31 | var r=bigArrContainsSmallArr(bigArr, smallArr)
32 | log(r)
33 |
--------------------------------------------------------------------------------
/数组/随机打乱数组顺序329.js:
--------------------------------------------------------------------------------
1 | let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
2 | console.log(shuffle(arr));
3 |
4 | function shuffle(arr) {
5 | let i = arr.length;
6 | while (i) {
7 | let j = Math.floor(Math.random() * i--);
8 | [arr[j], arr[i]] = [arr[i], arr[j]];
9 | }
10 | return arr;
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/文件/读写data目录.js:
--------------------------------------------------------------------------------
1 | var path = '/data/user/0/com.tencent.mobileqq/guid'
2 | r = readFile(path)
3 | log(r)
4 | writeFile(path, 'dsfsfdsafasfds')
5 | r = readFile(path)
6 | log(r)
7 |
8 | function readFile(path) {
9 | var sh = new Shell(true);
10 | var tempFile = '/sdcard/temp.txt'
11 | sh.exec('cat ' + path + '> ' + tempFile)
12 | sh.exitAndWaitFor()
13 | return files.read(tempFile)
14 | }
15 |
16 | function writeFile(path, content) {
17 | var tempFile = '/sdcard/temp.txt'
18 | files.createWithDirs(tempFile)
19 | files.write(tempFile, content)
20 | var sh = new Shell(true);
21 | sh.exec('cat ' + tempFile + ' > ' + path)
22 | sh.exitAndWaitFor()
23 | }
24 |
--------------------------------------------------------------------------------
/时间/实时显示脚本运行时长.js:
--------------------------------------------------------------------------------
1 | console.show()
2 |
3 | function main() {
4 | threads.start(
5 | function () {
6 | while (1) {
7 | runTime();
8 | sleep(1000)
9 | }
10 | }
11 | )
12 | setInterval(
13 | () => {log('把setInterval改成你要做的事情')}, 1000
14 | )
15 | }
16 | var runTime = function () {
17 | var startTime = new Date().getTime()
18 | return function () {
19 | var endTime = new Date().getTime()
20 | var spendTime = Math.floor((endTime - startTime)/1000)
21 | log(util.format('运行了%d秒',spendTime))
22 | }
23 | }()
24 | main()
25 |
--------------------------------------------------------------------------------
/显示消息/改变toast位置.js:
--------------------------------------------------------------------------------
1 | function toastAt0(msg, x, y) {
2 | importClass(android.widget.Toast);
3 | importClass(android.view.Gravity);
4 | var toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
5 | toast.setGravity(Gravity.TOP | Gravity.LEFT, x, y);
6 | toast.show();
7 | }
8 |
9 | function toastAt(msg, x, y) {
10 | ui.run(() => toastAt0(msg, x, y));
11 | }
12 |
13 | toastAt('sdfsfdsdfs',300,300)
14 | sleep(2000)
15 |
--------------------------------------------------------------------------------
/牙叔教程q群.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/牙叔教程q群.png
--------------------------------------------------------------------------------
/牙叔教程公众号.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/牙叔教程公众号.jpg
--------------------------------------------------------------------------------
/电脑知识点/win7结束任务.txt:
--------------------------------------------------------------------------------
1 | tasklist
2 |
3 | Taskkill/im Pasteasy.exe /f
4 |
--------------------------------------------------------------------------------
/白酒煮饭/QQ加好友.js:
--------------------------------------------------------------------------------
1 | textcontains("添加好友").waitfor()
2 | console.show()
3 | if (textcontains(x) exists() t
4 | if (text contains("问题").exists())
5 | {
6 | click("取消")
7 | relset
8 | var c = textcontains"").().text() var a = c split("
9 | num = a[2].split("岁")
10 | num = (num[])
11 | 1 og()
12 | Log(a)
13 | log()
14 | if (num> = 20 && num< = 23) {
15 | click("发送")
16 | reset
17 | click("取消")
18 | }
19 | reiser
20 | log("没有")
21 | click("取消")
22 | }
--------------------------------------------------------------------------------
/白酒煮饭/QQ名片点赞脚本.js:
--------------------------------------------------------------------------------
1 | auto.waitFor();
2 |
3 | function 下滑(){
4 | className("AbsListView").scrollable().scrollForward();
5 | }
6 |
7 | function 赞(){
8 | className("ImageView").desc("赞").click();
9 | }
10 |
11 | function 显示更多(){
12 | for(let i = 0; i < 2;i++){
13 | click("显示更多");
14 | }
15 | }
16 |
17 | toast("请打开自己的资料页,点击点赞图标");
18 | sleep(100);
19 |
20 | while(notStopped()){
21 | for(let i = 0; i < 10; i++){
22 | 赞();
23 | }
24 | 显示更多();
25 | 下滑();
26 | }
--------------------------------------------------------------------------------
/白酒煮饭/QQ清除好友聊天字体.js:
--------------------------------------------------------------------------------
1 | var info = "sdcard/tencent/MobileQQ/.font_info"
2 | if (confirm("是否将所有好友的字体恢复系统默认?")) {
3 |
4 |
5 | if (files.exists(info)) {
6 | files.removeDir(info);
7 | files.createIfNotExists(info);
8 | toastLog("请刷新QQ查看");
9 |
10 | } else {
11 | toastLog("字体文件不存在");
12 | exit();
13 | }
14 | } else {
15 | exit();
16 | //在这里更新恢复正常字体功能
17 |
18 | }
--------------------------------------------------------------------------------
/白酒煮饭/[Http代理] 讯代理_优质代理.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/snailuncle/autojsDemo/d3617a3cb7958407e0b2d7f6d132f23f297e383c/白酒煮饭/[Http代理] 讯代理_优质代理.js
--------------------------------------------------------------------------------
/白酒煮饭/[QQ] 为指定好用发送固定金额的红包..js:
--------------------------------------------------------------------------------
1 | auto.waitFor();
2 | //对方QQ号码
3 | var QNum = '';
4 | //红包金额
5 | var Money = '';
6 | //自己的支付密码
7 | var PaymentPass = '';
8 |
9 | var i = app.intent({
10 | action: "VIEW",
11 | data: "mqqwpa://im/chat?chat_type=wpa&uin="+QNum
12 | });
13 | app.startActivity(i);
14 |
15 | waitForActivity('com.tencent.mobileqq.activity.SplashActivity');
16 | sleep(2000);
17 | //判断是否弹出键盘
18 | var inputBar_Y = id('inputBar').findOne().bounds().centerY()
19 | if (inputBar_Y > (device.height/5)*4) {
20 | id('listView1').findOne().parent().child(6).child(4).click();
21 | } else {
22 | id('listView1').findOne().parent().child(5).child(4).click();
23 | }
24 |
25 | text('普通红包').waitFor();
26 | while(!click('普通红包'));
27 | text('塞钱').waitFor();
28 | text('输入金额').setText(Money);
29 | sleep(200);
30 | textStartsWith('塞钱').findOne().click();
31 | text('找回密码').waitFor();
32 | desc('支付密码输入框').setText(PaymentPass);
--------------------------------------------------------------------------------
/白酒煮饭/[刷脸打卡]快速进入钉钉打卡界面.js:
--------------------------------------------------------------------------------
1 | //需要用到root权限 否则打不开
2 | var TimeStamp = Math.round(new Date());
3 | var corpId = ""; //自己想办法获取公司的ID ding开头的一串码
4 | shell("am start -n com.alibaba.android.rimet/com.alibaba.lightapp.runtime.activity.CommonWebViewActivity"+
5 | " -a android.intent.action.VIEW"+
6 | " --es url 'https://attend.dingtalk.com/attend/index.html?swtrace=oa_cloud_attendance_onduty_remind&showmenu=false&_progress=false&_from=oa&corpId="+corpId+"&_biz=onDuty_remind'"+
7 | " --el navi_to_open_mini_app "+TimeStamp+
8 | " --es title '考勤打卡'", true);
--------------------------------------------------------------------------------
/白酒煮饭/[网络]_获取内外网IP地址.js:
--------------------------------------------------------------------------------
1 | auto();
2 | console.show();
3 | //http://myip.ipip.net/
4 | importClass('java.net.Inet4Address');
5 | importClass('java.net.InetAddress');
6 | importClass('java.net.NetworkInterface');
7 | importClass('java.util.Enumeration');
8 | importClass('java.net.Inet6Address');
9 | //获取内网IP地址
10 | var hostIp = null;
11 | try{
12 | var nis = NetworkInterface.getNetworkInterfaces();
13 | var ia = null;
14 | while (nis.hasMoreElements()) {
15 | var ni = nis.nextElement();
16 | var ias = ni.getInetAddresses();
17 | while (ias.hasMoreElements()) {
18 | ia = ias.nextElement();
19 | if (ia instanceof Inet6Address) {
20 | continue;
21 | }
22 | var ip = ia.getHostAddress();
23 | if (!"127.0.0.1".equals(ip)) {
24 | hostIp = ia.getHostAddress();
25 | break;
26 | }
27 | }
28 | }
29 | } catch (e) {
30 | log(e);
31 | }
32 | log(hostIp);
33 |
34 | //获取外网ip地址
35 | var getIp_api = http.get('http://pv.sohu.com/cityjson?ie=utf-8');
36 | var InetIP = getIp_api.body.string();
37 | eval(InetIP);
38 | log(returnCitySN.cip);
--------------------------------------------------------------------------------
/白酒煮饭/mp3音频合并.js:
--------------------------------------------------------------------------------
1 | File=java.io.File;
2 | FileOutputStream=java.io.FileOutputStream;
3 | RandomAccessFile=java.io.RandomAccessFile;
4 | var path=[];
5 | path[0]="/sdcard/backups/apps/支付宝到账1万元/1.mp3";
6 | path[1]="/sdcard/backups/apps/支付宝到账1万元/2.mp3";
7 | path[2]="/sdcard/backups/apps/支付宝到账1万元/3.mp3";
8 | path[3]="/sdcard/backups/apps/支付宝到账1万元/4.mp3";
9 | var pathe="/sdcard/backups/apps/支付宝到账1万元/合并后.mp3";
10 | uniteAMRFile(path,pathe);
11 |
12 | function uniteAMRFile(partsPaths, unitedFilePath) {
13 | //try {
14 | var unitedFile = new File(unitedFilePath+"2");
15 | var fos = new FileOutputStream(unitedFile);
16 | var ra = null;
17 | for (var i = 0; i < partsPaths.length; i++) {
18 | ra = new RandomAccessFile(partsPaths[i], "r");
19 | if (i != 0) {
20 | ra.seek(6);
21 | }
22 | var buffer = java.lang.String(new Array(1024 * 8+1).toString()).getBytes();
23 | var len = 0;
24 | while ((len = ra.read(buffer)) != -1) {
25 | fos.write(buffer, 0, len);
26 | }
27 | }
28 | ra.close();
29 | fos.close();
30 | // } catch (e) {}
31 | }
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/白酒煮饭/为指定好友点赞.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 为指定QQ点赞, 理论兼容所有安卓机...具体效果我也不知道,只在安卓7.0+版本测试了
3 | * 如果有问题,群里说吧.QQ号码格式看下面
4 | * 注意: 运行本脚本需要安卓7.0以上或者已经root的设备,最低运行版本不建议低于安卓5.0
5 | */
6 |
7 | auto.waitFor();
8 |
9 | var QQNum_Arry = [ //按照如下格式添加你要点赞的QQ号
10 | "289986635",
11 | "654343442",
12 | ];
13 |
14 | if (device.sdkInt < 24) {
15 | var ra = new RootAutomator();
16 | }
17 |
18 | for (let i = 0; i < QQNum_Arry.length; i++) {
19 | app.startActivity({
20 | data:"mqqapi://card/show_pslcard?&uin="+QQNum_Arry[i]
21 | });
22 |
23 | waitForActivity("com.tencent.mobileqq.activity.FriendProfileCardActivity");
24 | sleep(3000);
25 | let Btn = descEndsWith("次赞").findOne().bounds();
26 | let X = Btn.centerX();
27 | let Y = Btn.centerY();
28 | for (let i = 0; i < 10; i++) {
29 | if (device.sdkInt < 24) {
30 | ra.tap(X,Y);
31 | } else {
32 | click(X,Y);
33 | }
34 | sleep(50);
35 | }
36 | }
37 |
38 | if (device.sdkInt < 24) {
39 | ra.exit();
40 | }
--------------------------------------------------------------------------------
/白酒煮饭/九九乘法表.js:
--------------------------------------------------------------------------------
1 | function 循环(i, n) { //数位长度, 要转换的数
2 | var sz = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
3 | var c = sz.length;
4 | if (i < 0) return;
5 | for (var a = 0, o = n; a < i; a++) {
6 | o = parseInt(o / c);
7 | }
8 | D += sz[o % c];
9 | 循环(--i, n);
10 | }
11 |
12 | var D = []
13 | 循环(9, 556);
14 | log(D);
15 | /*
16 | //你敢运行一下被注释的(可怕的)代码吗!
17 | for (var k = 0; k < 99; k++) {
18 | var D = []
19 | 循环(9, k);
20 | log(D)
21 | }*/
--------------------------------------------------------------------------------
/白酒煮饭/使用命令删除图片后,更新图库缓存.js:
--------------------------------------------------------------------------------
1 | var f = '/sdcard/img/1.png';
2 | app.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,android.net.Uri.fromFile(java.io.File(f))));
--------------------------------------------------------------------------------
/白酒煮饭/免费时间API.js:
--------------------------------------------------------------------------------
1 | //淘宝时间戳API
2 | var recode_taobao = http.get("http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp");
3 | var tapbaoTime = recode_taobao.body.json().data.t;
4 | log(tapbaoTime);
5 | //腾讯QQ时间API
6 | var recode_qq = http.get("http://cgi.im.qq.com/cgi-bin/cgi_svrtime");
7 | var qqTime = recode_qq.body.string();
8 | log(qqTime);
9 | //苏宁时间API
10 | var recode_suning = http.get("http://quan.suning.com/getSysTime.do");
11 | var suningTime = recode_suning.body.json();
12 | log(suningTime.sysTime1);
13 | log(suningTime.sysTime2);
--------------------------------------------------------------------------------
/白酒煮饭/全局半透明背景.js:
--------------------------------------------------------------------------------
1 | var w = floaty.rawWindow(
2 |
3 |
4 |
5 | );
6 |
7 | w.setTouchable(false);
8 |
9 | setTimeout(()=>{
10 | w.close();
11 | }, 360000);
12 | //720*1280分辨率显示正常
--------------------------------------------------------------------------------
/白酒煮饭/删除空白文件.js:
--------------------------------------------------------------------------------
1 | if(confirm("该操作会删除SD卡目录及其子目录下所有空文件夹,是否继续?")){
2 | toast("请点击右上角打开日志");
3 | deleteAllEmptyDirs(files.getSdcardPath());
4 | toast("全部完成!");
5 | }
6 |
7 | function deleteAllEmptyDirs(dir){
8 | var list = files.listDir(dir);
9 | var len = list.length;
10 | if(len == 0){
11 | log("删除目录 " + dir + " " + (files.remove(dir) ? "成功" : "失败"));
12 | return;
13 | }
14 | for(let i = 0; i < len; i++){
15 | var child = files.join(dir, list[i]);
16 | if(files.isDir(child)){
17 | deleteAllEmptyDirs(child);
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/白酒煮饭/刷会撩更会聊QQ勋章.js:
--------------------------------------------------------------------------------
1 | auto("");
2 | toast("请打开一个聊天窗口");
3 | for(var i = 1; i <= 6666; i++){
4 | setText("运气王 发");
5 | click("发送");
6 | sleep(100); }
--------------------------------------------------------------------------------
/白酒煮饭/双击返回退出的ui.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 | );
7 | var isCanFinish = false;
8 | var isCanFinishTimeout;
9 | ui.emitter.on("back_pressed", e => {
10 | if (!isCanFinish) {
11 | isCanFinish = true;
12 | isCanFinishTimeout=setTimeout(() => {
13 | toastLog("双击退出");
14 | isCanFinish = false;
15 | }, 400);
16 | e.consumed = true;
17 | } else {
18 | clearTimeout(isCanFinishTimeout);
19 | e.consumed = false;
20 | };
21 | });
--------------------------------------------------------------------------------
/白酒煮饭/取关全部公众号.js:
--------------------------------------------------------------------------------
1 | "auto";
2 |
3 | //if (confirm("将会取关所有公众号,是否继续")) {
4 | unfollowAll();
5 | //}
6 |
7 | function unfollowAll() {
8 | //launchApp("微信");
9 | sleep(3000);
10 | while (!click("通讯录"));
11 | while (!click("公众号"));
12 | sleep(500);
13 | while (true) {
14 | className("ListView").findOne().children().each(function(item) {
15 | if (item.longClickable()) {
16 | log(item);
17 | unfollow(item);
18 | sleep(400);
19 | }
20 | });
21 | }
22 | }
23 |
24 | function unfollow(item) {
25 | item.longClick();
26 | while (!click("取消关注"));
27 | while (!click("不再关注"));
28 | }
29 |
--------------------------------------------------------------------------------
/白酒煮饭/只同时运行一个脚本.js:
--------------------------------------------------------------------------------
1 | /*
2 | 打开这个脚本的同时,会同时结束其他脚本
3 | 多次运行同一个脚本,会结束前面的脚本,运行最后一个脚本
4 | 使用方法,把下面
5 | //=================
6 | 之前的代码放在脚本的开头就可以了
7 | */
8 | 只运行一个脚本()
9 | function 只运行一个脚本() {
10 | var source = engines.myEngine().getTag("source");
11 | var minling = files.read(source)
12 | minling = minling.replace("只运行一个脚本", "开始")
13 | log(minling)
14 | engines.execScript("hello ", minling)
15 | engines.stopAll()
16 | }
17 | function 开始() {
18 | toast("开始")
19 | }
20 | //=================
21 |
22 |
23 | sleep(1000)
24 | i = 0
25 | while (true) {
26 | toastLog("哈哈" + i)
27 | i++
28 | sleep(2000)
29 | }
--------------------------------------------------------------------------------
/白酒煮饭/悬浮窗颜色渐变.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | ui.layout(
4 |
5 | 需一美貌男子,精壮
6 |
7 | );
8 |
9 |
10 | ui.col.click(() => {
11 | startChange();
12 | });
13 |
14 | transparency = 20;
15 | function startChange() {
16 | downloadId = setInterval(() => {
17 | transparency++;
18 | if (transparency > 255) {
19 | clearInterval(downloadId);
20 | return;
21 | }
22 | colnum="#"+(transparency.toString(16))+"0000FF";
23 | log(colnum);
24 | toast(colnum);
25 |
26 |
27 | ui.col.text(transparency.toString(16));
28 | ui.col.setTextColor(colors.parseColor(colnum))
29 |
30 |
31 | colnum2="#"+(transparency.toString(16))+"FF6633"
32 |
33 | ui.col.setBackgroundColor(colors.parseColor(colnum2));
34 |
35 |
36 | }, 8);
37 | }
38 |
--------------------------------------------------------------------------------
/白酒煮饭/截图水印.js:
--------------------------------------------------------------------------------
1 | toastLog("Are you ready?");
2 | if (!requestScreenCapture()) {
3 | toast("请求截图失败");
4 | exit();
5 | };
6 |
7 |
8 | var IMG=captureScreen();
9 | var bitmap=IMG.getBitmap();
10 | var canvas=new Canvas(bitmap);
11 | var w=canvas.width,h=canvas.height;
12 | var paint = new Paint;
13 | paint.setTextAlign(Paint.Align.CENTER);
14 | paint.setStrokeWidth(5);
15 | paint.setARGB(127,127,127,127);
16 | var size = 150;
17 | paint.setTextSize(size);
18 | canvas.drawText("这是我的截图", w / 2, h / 2 + 0.365 * size, paint);
19 |
20 | var img=canvas.toImage();
21 | images.save(img,"/sdcard/脚本/我的截图.png","png",50);
--------------------------------------------------------------------------------
/白酒煮饭/打印当前页面 所有的 文字 和描.js:
--------------------------------------------------------------------------------
1 | var obj_text = textMatches(".*");
2 | var obj_desc = descMatches(".*");
3 | sleep(3000);
4 | for (let i = 0; i < obj_text.find().size(); i++) {
5 | log(obj_text.find().get(i).text())
6 | }
7 | for (let i = 0; i < obj_desc.find().size(); i++) {
8 | log(obj_desc.find().get(i).desc())
9 | }
--------------------------------------------------------------------------------
/白酒煮饭/搜狗图床.js:
--------------------------------------------------------------------------------
1 | function 上传图片(path){
2 | var url="http://pic.sogou.com/pic/upload_pic.jsp";
3 | var res=http.postMultipart(url,{
4 | "file": open(path),
5 | });
6 | var t=res.body.string();
7 | return t;
8 | }
9 | path="/storage/emulated/0/BDY_DOWNLOAD/1.驱动&程序_69ac5/1.驱动&程序/122U操作图解说明/1操作说明(第一页).jpg";
10 | log(上传图片(path));
11 |
12 |
--------------------------------------------------------------------------------
/白酒煮饭/支付宝帐单自动清理.js:
--------------------------------------------------------------------------------
1 | auto.waitFor();
2 |
3 | KS();
4 |
5 | function KS() {
6 | text("账单").waitFor();
7 | if(swipe(500, 500, 500, 1000, 800) == true){
8 | sleep(1000);
9 | }
10 | var i = 0;
11 | while (i < 15) {
12 | var k = desc("日期选择").findOne().parent().parent();
13 | if (k.childCount() < 3) {
14 | toast("清理完毕");
15 | } else {
16 | k.child(3).longClick();
17 | text("删除").waitFor();
18 | sleep(100);
19 | var sc = text("删除").findOne();
20 | sleep(100);
21 | click(sc.bounds().centerX(), sc.bounds().centerY());
22 | }
23 | sleep(150);
24 |
25 | i = i + 1;
26 | }
27 | KS();
28 | }
--------------------------------------------------------------------------------
/白酒煮饭/支付宝部分小程序的intent.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 60000002 蚂蚁森林
3 | * 60000006 附近优惠
4 | * 60000012 中小学
5 | * 60000023 蚂蚁保险
6 | * 60000024 彩票游戏,不对所有用户开放
7 | * 60000029 口碑排行榜
8 | * 60000032 添加第一张证件 各类证件齐管理
9 | * 60000033 in贴纸商城
10 | * 60000039 超值抢购
11 | * 60000040 未来酒店
12 | * 60000044 权益区 无法加载
13 | * 60000047 校园头条 无法加载,可能缺少参数
14 | * 60000052 手机通讯录备份 未对所有用户开放
15 | * 60000057 阿里宝卡
16 | * 60000071 天天有料
17 | * 60000076 VIP预约服务 无法加载,可能我不是VIP的原因
18 | * 60000077 优酷会员首页
19 | * 60000081 商家服务
20 | * 60000091 花呗
21 | * 60000103 支付周奖励金列表页
22 | * 60000105 我的银行卡 管理页
23 | * 60000120 福员外 不知道干嘛的
24 | * 60000125 租房
25 | * 60000126 余额宝
26 | * 60000130 淘票票
27 | * 60000134 外币兑换 服务正在升级
28 | * 60000135 飞猪汽车票
29 | * 60000145 阿里巴巴认证中心
30 | * 60000146 寄快递
31 | * 60000148 财富号
32 | * 60000150 我的口碑
33 | * 60000153 注销账号 注销支付宝账号用的
34 | * 60000154 AA收款
35 | * 60000155 共享单车
36 | * 60000156 支付宝红包~这个应该也是缺少参数
37 | * 60000160 稳健收益 应该是理财类的东西
38 | * 60000161 蚂蚁会员周周乐
39 | * 60000162 彩虹星愿 应该是教育孩子的
40 | *
41 | */
42 |
43 | var a = app.intent({
44 | action: "VIEW",
45 | data: "alipayqr://platformapi/startapp?saId=60000002"
46 | });
47 | app.startActivity(a);
--------------------------------------------------------------------------------
/白酒煮饭/改变字体颜色.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 | );
8 |
9 | ui.click_me.on("click", ()=>{
10 | toastLog(colors.parseColor("#00FF00"));
11 | ui.id.setTextColor(-16711936);
12 | });
--------------------------------------------------------------------------------
/白酒煮饭/日期➕周数.js:
--------------------------------------------------------------------------------
1 | var ddd = new Date();
2 | var str = util.format("%d年%d月%d日", ddd.getFullYear(), ddd.getMonth() + 1, ddd.getDate());
3 | ssr = util.format("%d", ddd.getDay());
4 | var weekday = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
5 | var mynum = weekday[ssr];
6 | i = getWeekOfYear();
7 | o = i - 9;
8 | alert("😀今天是" + str + "\n" + mynum + "\n今年第" + i + "周\n本学期第" + o + "周");
9 |
10 |
11 | function getWeekOfYear() {
12 | var today = new Date();
13 | var firstDay = new Date(today.getFullYear(), 0, 1);
14 | var dayOfWeek = firstDay.getDay();
15 | var spendDay = 1;
16 | if (dayOfWeek != 0) {
17 | spendDay = 7 - dayOfWeek + 1;
18 | }
19 | firstDay = new Date(today.getFullYear(), 0, 1 + spendDay);
20 | var d = Math.ceil((today.valueOf() - firstDay.valueOf()) / 86400000);
21 | var result = Math.ceil(d / 7);
22 | return result + 1;
23 | };
--------------------------------------------------------------------------------
/白酒煮饭/朋友圈点赞.js:
--------------------------------------------------------------------------------
1 | "auto";
2 |
3 | //下滑
4 | function scroll(){
5 | className("ListView").scrollForward();
6 | }
7 |
8 | //尝试点赞
9 | function tryFav(btn){
10 | btn.click();
11 | sleep(300);
12 | if(!click("赞")){
13 | btn.click();
14 | }
15 | }
16 |
17 | while(true){
18 | var c = className("ImageView").desc("评论").untilFind();
19 | c.each(function(btn){
20 | tryFav(btn);
21 | });
22 | scroll();
23 | }
--------------------------------------------------------------------------------
/白酒煮饭/查看wifi状态.js:
--------------------------------------------------------------------------------
1 | importPackage(android.content);
2 | let wifiManager = context.getSystemService(Context.WIFI_SERVICE);
3 | getCurrentWifiStateState(wifiManager)
4 | function getCurrentWifiStateState(wifiManager) {
5 | if (wifiManager.isWifiEnabled()){
6 | alert('打开状态')
7 | }else{
8 | alert('关闭状态')
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/白酒煮饭/查询本机IP地理位置.js:
--------------------------------------------------------------------------------
1 | var ip地理位置 = false
2 | var ip地理位置正则 = /本机IP: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}<\/span>([\s\S]*?)<\/td/
3 | var ipUrl = "http://www.baidu.com/s?ie=UTF-8&wd=ip%E5%BD%92%E5%B1%9E%E5%9C%B0%E6%9F%A5%E8%AF%A2"
4 | var r = http.get(ipUrl);
5 | log("code = " + r.statusCode);
6 | var htmlResult = r.body.string()
7 | ip地理位置 = ip地理位置正则.exec(htmlResult)
8 | if (ip地理位置) {
9 | ip地理位置 = ip地理位置正则.exec(ip地理位置)
10 | ip地理位置 = ip地理位置[1]
11 | toastLog(ip地理位置)
12 | } else {
13 | log('没有查询到Ip地理位置,脚本停止')
14 | exit()
15 | }
16 |
--------------------------------------------------------------------------------
/白酒煮饭/格式化时间.js:
--------------------------------------------------------------------------------
1 | var window = floaty.rawWindow(
2 |
3 |
4 |
5 |
6 | );
7 |
8 | window.setTouchable(false);
9 | window.setPosition(100, 100);
10 |
11 |
12 |
13 | setInterval(() => {
14 | ui.run(() => {
15 | window.text.setText(new Date().Format("yyyy-MM-dd hh:mm:ss"));
16 | });
17 |
18 | }, 50);
19 |
20 | Date.prototype.Format = function(fmt) { //author: meizz
21 | var o = {
22 | "M+": this.getMonth() + 1, //月份
23 | "d+": this.getDate(), //日
24 | "h+": this.getHours(), //小时
25 | "m+": this.getMinutes(), //分
26 | "s+": this.getSeconds(), //秒
27 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度
28 | "S": this.getMilliseconds() //毫秒
29 | };
30 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
31 | for (var k in o)
32 | if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
33 | return fmt;
34 | }
--------------------------------------------------------------------------------
/白酒煮饭/检测网络是否可用.js:
--------------------------------------------------------------------------------
1 | importClass(android.net.ConnectivityManager);
2 | var cm=context.getSystemService(context.CONNECTIVITY_SERVICE);
3 | var net=cm.getActiveNetworkInfo();
4 | log(net);
5 | if(net==null||!net.isAvailable()){
6 | toastLog("网络连接不可用!");
7 | }else{
8 | toastLog("网络连接可用!");
9 | }
--------------------------------------------------------------------------------
/白酒煮饭/每日一句(英文励志).js:
--------------------------------------------------------------------------------
1 | var res = http.post("http://route.showapi.com/1211-1", {
2 | headers: {
3 | 'Content-Type': 'application/x-www-form-urlencoded'
4 | },
5 | "showapi_appid": '79304',
6 | "showapi_sign": 'dc57036459004b369823957c97e01f14',
7 | "count": "10"
8 | });
9 | var html = res.body.json().showapi_res_body.data;
10 | for (let i in html){
11 | log(html[i].english + "\n" + html[i].chinese+"\n\n");
12 | };
--------------------------------------------------------------------------------
/白酒煮饭/百度人脸识别.js:
--------------------------------------------------------------------------------
1 |
2 | requestUrl="https://aip.baidubce.com/rest/2.0/face/v3/detect"
3 | accessToken = '24.a51d52060f4039b9d958f85e5561004a.2592000.1537688970.282335-11544833'
4 | requestUrl = requestUrl + "?access_token=" + accessToken
5 |
6 | imgFile="/storage/emulated/0/QQBrowser/图片收藏/8669ee1e1cc627171136ce321cf98bad.jpg"
7 | function img64(imgFile){
8 | let img=images.read(imgFile)
9 | let img64=images.toBase64(img)
10 | return img64
11 | }
12 | imageBase64=img64(imgFile)
13 |
14 | console.show();
15 | var res = http.post(requestUrl, {
16 | headers: {
17 | 'Content-Type': 'application/json'
18 | },
19 | image:imageBase64,
20 | image_type:"BASE64",
21 | face_field:"age,beauty,face_shape,gender,glasses,facetype"
22 | });
23 |
24 | var html = res.body.string();
25 | log(html)
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/白酒煮饭/百度文字识别(自动获取token).js:
--------------------------------------------------------------------------------
1 | function Baidu_OCR(imgFile) {
2 | access_token = http.get("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=YIKKfQbdpYRRYtqqTPnZ5bCE&client_secret=hBxFiPhOCn6G9GH0sHoL0kTwfrCtndDj").body.json().access_token;
3 | url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic" + "?access_token=" + access_token;
4 | imag64 = images.toBase64(images.read(imgFile));
5 | res = http.post(url, {headers: {'Content-Type': 'application/x-www-form-urlencoded'},image: imag64,image_type: "BASE64",language_type:"JAP"});
6 | str = JSON.parse(res.body.string()).words_result.map(val => val.words).join('\n');
7 | return str;
8 | }
9 |
10 | imgFile = "/storage/emulated/0/tencent/Tim_Images/-2c197ea407301935.jpg";
11 | log(Baidu_OCR(imgFile));
--------------------------------------------------------------------------------
/白酒煮饭/百度翻译[中转英].js:
--------------------------------------------------------------------------------
1 | function Baidu_zh_To_en(str) {
2 | function getMd5(string) {return java.math.BigInteger(1, java.security.MessageDigest.getInstance("MD5").digest(java.lang.String(string).getBytes())).toString(16)}
3 | var salt = (new Date).getTime();
4 | var sign = getMd5("20180125000118573" + str + salt + "O_PrebY0tsdbHjKNOaDf");
5 | var res = http.post("http://api.fanyi.baidu.com/api/trans/vip/translate?", {q: str,appid: "20180125000118573",salt: salt,from: "zn",to: "en",sign: sign});
6 | str = JSON.parse(res.body.string()).trans_result.map(val => val.dst).join('\n');
7 | return str;
8 | }
9 | toastLog(Baidu_zh_To_en("今天天气好晴朗"));
--------------------------------------------------------------------------------
/白酒煮饭/网易云音乐连接转换.js:
--------------------------------------------------------------------------------
1 | /*
2 | 把网易云音乐复制的链接输入到这个脚本
3 | 就可以在浏览器中打开
4 | 配合特殊浏览器可以免费下载音乐
5 | */
6 | j = ["电台主页", "单独电台", "歌单", "歌曲"];
7 | p = ["radio?id=", "/program/", "/playlist/", "/song/"];
8 | a = dialogs.rawInput("连接");
9 | for (var i in p) {
10 | q = a.indexOf(p[i]);
11 | if (q != (-1)) {
12 | break;
13 | };
14 | };
15 | switch (i * 1) {
16 | case 0:
17 | log(j[0])
18 | b = a.split("id=")[1].split("&")[0];
19 | c = "http://music.163.com/m/djradio?id=" + b;
20 | setClip(c);
21 | break;
22 | case 1:
23 | log(j[1])
24 | b = a.split("gram/")[1].split("/")[0];
25 | c = "http://music.163.com/m/program?id=" + b + "&autoplay=true";
26 | setClip(c);
27 | break;
28 | case 2:
29 | log(j[2])
30 | b = a.split("list/")[1].split("/")[0];
31 | c = "http://music.163.com/m/playlist?id=" + b;
32 | setClip(c);
33 | break;
34 | case 3:
35 | log(j[3])
36 | b = a.split("song/")[1].split("/?")[0];
37 | c = "http://music.163.com/m/song?id=" + b;
38 | setClip(c);
39 | break;
40 | default:
41 | alert("应该修改脚本了");
42 | }
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | //
--------------------------------------------------------------------------------
/白酒煮饭/自动加QQ好友.js:
--------------------------------------------------------------------------------
1 | path="/storage/emulated/0/脚本/qq号.txt";
2 | file = open(path, "r")
3 | for(i0=0;i0
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | );
15 |
16 | ui.goback.click(() => {
17 | ui.webshow.goBack();
18 | })
19 | ui.goforward.click(() => {
20 | ui.webshow.goForward();
21 | })
22 | ui.res.click(() => {
23 | ui.webshow.reload();
24 | })
25 |
26 | ui.webshow.getSettings().setJavaScriptEnabled(true);
27 | ui.webshow.loadUrl("http://riki.cc/forum-1.htm");
--------------------------------------------------------------------------------
/白酒煮饭/调用扫一扫.js:
--------------------------------------------------------------------------------
1 | importClass(android.content.Intent);
2 | importClass(android.net.Uri);
3 |
4 | toWeChatScan2();
5 |
6 | function toWeChatScan() {
7 | try {
8 | toast("正在打开微信扫一扫…");
9 | //利用Intent打开微信
10 | app.startActivity({
11 | "action": "VIEW",
12 | "packageName": "com.tencent.mm",
13 | "className": "com.tencent.mm.ui.LauncherUI",
14 | "extras": {
15 | "LauncherUI.From.Scaner.Shortcut": true
16 | }
17 | })
18 | } catch (e) {
19 | //若无法正常跳转,在此进行错误处理
20 | toast("无法跳转到微信,请检查您是否安装了微信!");
21 | }
22 | };
23 |
24 | function toAliPayScan() {
25 | try {
26 | toast("正在打开支付宝扫一扫…");
27 | //利用Intent打开支付宝
28 | //支付宝跳过开启动画打开扫码和付款码的url scheme分别是alipayqr://platformapi/startapp?saId=10000007和
29 | //alipayqr://platformapi/startapp?saId=20000056
30 | var uri = new Uri.parse("alipayqr://platformapi/startapp?saId=10000007");
31 | var intent = new Intent(Intent.ACTION_VIEW, uri);
32 | app.startActivity(intent);
33 | } catch (e) {
34 | //若无法正常跳转,在此进行错误处理
35 | toast("无法跳转到支付宝,请检查您是否安装了支付宝!");
36 | }
37 | }
--------------------------------------------------------------------------------
/百度网盘/百度网盘bsd获取199.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | dialogs.alert("该BDUSS获取器来源于网络,\n安全系数未知! \n请谨慎使用,本人只是该获取器搬运工,不承担任何使用方面责任!\n获取器发布网站 彩虹工具网 \n网址:http://tool.cccyun.cc/")
3 | dialogs.alert("若对该获取器的安全性存在怀疑,请自行百度BDUSS获取方式!")
4 | ui.layout(
5 |
6 |
7 |
8 | )
9 |
10 | setInterval(()=>{}, 1000);
11 |
12 | ui.webview.loadUrl("http://tool.cccyun.cc/tool/bduss/index.html");
13 |
--------------------------------------------------------------------------------
/第三方API接口/百度AI开放平台人脸检测102.js:
--------------------------------------------------------------------------------
1 | auto()
2 | requestUrl="https://aip.baidubce.com/rest/2.0/face/v3/detect"
3 | accessToken = '你的token一般是这样的24.440c39cd127bd6c2695e3273df0e4f4e.2592000.1534'
4 | requestUrl = requestUrl + "?access_token=" + accessToken
5 |
6 | imgFile="/sdcard/zly.png"
7 | function img64(imgFile){
8 | let img=images.read(imgFile)
9 | let img64=images.toBase64(img)
10 | return img64
11 | }
12 | imageBase64=img64(imgFile)
13 |
14 | console.show();
15 | var res = http.post(requestUrl, {
16 | headers: {
17 | 'Content-Type': 'application/json'
18 | },
19 | image:imageBase64,
20 | image_type:"BASE64",
21 | face_field:"age,beauty,face_shape,gender,glasses,facetype"
22 | });
23 |
24 | var html = res.body.string();
25 | log(html)
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/第三方API接口/百度文字识别140.js:
--------------------------------------------------------------------------------
1 | //截图当前屏幕并识别截图中的文字
2 |
3 | auto()
4 | //请求截图
5 | if(!requestScreenCapture()){
6 | toast("请求截图失败");
7 | exit();
8 | }
9 |
10 |
11 | log("识别开始")
12 | requestUrl="https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
13 | accessToken = '24.45e9e852ec0cc0f41a268e11ce7b2f3f.2592000.1535634423.282335-10386148'
14 | requestUrl = requestUrl + "?access_token=" + accessToken
15 | imgFile="/sdcard/test.jpg"
16 | function img64(imgFile){
17 | var img = captureScreen();
18 | let img64=images.toBase64(img)
19 | return img64
20 | }
21 | imageBase64=img64(imgFile)
22 | imageBase64=encodeURI(imageBase64)
23 | console.show();
24 | var res = http.post(requestUrl, {
25 | headers: {
26 | 'Content-Type': 'application/x-www-form-urlencoded'
27 | },
28 | image:imageBase64,
29 | image_type:"BASE64",
30 | });
31 | var html = res.body.string();
32 | log(html)
33 | log("识别结束")
34 |
--------------------------------------------------------------------------------
/第三方API接口/语音api131.js:
--------------------------------------------------------------------------------
1 | function 语音合成(str) {
2 | var str = str;
3 | var url = "http://www.xfyun.cn/herapi/solution/synthesis?vcn=x_yifeng&vol=7&spd=medium&textType=cn&textPut=" + str;
4 | var res = http.get(url).body.string();
5 | eval("res=" + res + ".data");
6 | var mp3 = http.get(res).body.bytes();
7 | files.writeBytes("/sdcard/ADM/腾讯/ui.mp3", mp3);
8 | // device.vibrate(30)
9 | }
10 | var path="/sdcard/ADM/腾讯/ui.mp3"
11 | var str=dialogs.rawInput("输入文字","哈哈")
12 | 语音合成(str);
13 | var myDate = new Date();
14 | var 年 = myDate.getFullYear(); //
15 | var 月 = myDate.getMonth() + 1; //
16 | if (月 < 10) {
17 | 月 = "0" + 月
18 | };
19 | var 日 = myDate.getDate(); //
20 | if (日 < 10) {
21 | 日 = "0" + 日
22 | };
23 | var 前路径 = "/sdcard/tencent/MobileQQ/";
24 | var qq = "2508385778";
25 | var 后路径 = "/ptt/" + 年 + 月 + "/" + 日 + "/";
26 | var 路径 = 前路径 + qq + 后路径;
27 |
28 | if (!files.exists(路径)) {
29 | exit();
30 | }
31 | var 文件数组 = files.listDir(路径, function(name) {
32 | return name.endsWith("");
33 | });
34 | var 文件名 = 文件数组[文件数组.length - 1];
35 | var slk路径 = files.join(路径, 文件名);
36 | files.copy(path, slk路径)
37 | device.vibrate(30)
38 |
39 |
--------------------------------------------------------------------------------
/第三方API接口/语音识别177.js:
--------------------------------------------------------------------------------
1 | //importClass(android.content.Intent);
2 | importClass(android.speech.RecognizerIntent)
3 |
4 | intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
5 | //intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
6 | // intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音识别");
7 | // app.startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
8 | intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); //本地识别程序
9 |
10 | intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); //网络识别程序
11 | app.startActivity(intent);
12 |
13 |
--------------------------------------------------------------------------------
/获取手机粘贴板.js:
--------------------------------------------------------------------------------
1 | log(getClip())
2 |
--------------------------------------------------------------------------------