# MyAutojs **Repository Path**: dzw22/MyAutojs ## Basic Information - **Project Name**: MyAutojs - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-03 - **Last Updated**: 2024-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一个手机上面的键盘精灵 通过auto js这个软件可以在手机上面操作 ### 一、编写代码环境 1. 首先手机上面需要安装 auto js 2. 在电脑上面安装vscode 插件 Auto.js-VSCodeExt 3. 启动插件服务: ctrl + shift + p 选择 输入 auto.js:start server 4. 手机电脑处于同一局域网 手机连接电脑 5. 执行代码 ctrl + shift + p 选择 auto.js:run on dervice 参考:https://www.cnblogs.com/sweetC/p/11807280.html ### 控件 [参考](https://blog.csdn.net/m0_54850952/article/details/123120543) #### 控件类型 首先明白什么是控件,有几种类型 * TextView 显示文字(“android.widget.TextView”) * ImageView 显示图片(“android.widget.ImageView”) * EditText 输入框 * Button 按钮,可附带图片 * CheckBox 复选框 #### 控件属性 如果获取到控件 我们可以查看下面的属性(常用) * className 类名,表示控件类型(“android.widget.TextView”等) * packageName 包名,表示控件所在的应用包(“com.tencent.mobileqq”) * editable 控件是否可编辑 * longClickable 控件是否可长按 * bounds 控件在屏幕上的范围,当控件无法点击,用这个属性获取坐标 * checkable 控件是否可勾选 * checked 控件是否可已勾选 * scrollable 控件是否可滑动 * selected 控件是否已选择 * visibleToUser 控件是否可见 * enabled 控件是否已启用 * depth 控件的布局深度 * drawingOrder 控件在父控件的绘制顺序。 * indexInParent 控件在父控件的位置 #### 获取控件 我们可以通过上面的属性 再加上一个 findOne() 就可以获取一个控件 * findOne() : 找不到就阻塞 参数可以传等待时间 * findOnce() : 找不到返回空 * findOnce(i) : 对屏幕上的控件进行搜索,并返回第 i + 1 个符合条件的控件;如果没有找到符合条件的控件,或者符合条件的控件个数 < i, 则返回null。 #### 判断控件是否存在 desc("我的").exists() ### 二、语法 首先在vscode 中新建一个 js文件 在里面写代码 然后运行就行 #### 2.1 应用类 ```text //启动app app.launchPackage("com.eg.android.AlipayGphone"); app.launchApp(appName); ``` #### 2.1 弹出消息类 ```text toast("s之后跳到下个视频!已经执行 "); ``` #### 设置值 在第几个上面输入有两种方式 setText([0],"121ASD121"); input([1],"we"); 不指定下标表示所有的输入框都输入 #### 2.1 寻找坐标 手机可以在 开发者选项-> 开启"指针位置" 可以直接获取指针位置了 ```text //根据文字找第一个坐标 var res = className("android.widget.TextView").text("京东活动").findOne(); click(res.bounds().centerX(), res.bounds().centerY()) //根据文字找第一个坐标很多个的坐标 var res = className("android.widget.TextView").text("京东活动").find(); if(!res.empty()){ res.forEach(function(item){ // 依次点击 click(item.bounds().centerX(), item.bounds().centerY()); }); return MP_valid; } //根据文本找 textContains("文本") descContains("文本") //根据某个图标来找坐标 // 根据bounds 点击 bounds(48, 684, 1032, 872).click() ``` #### 发起请求 ```test #get http.get("url") # post var token_Res = http.post("http://123.com", { grant_type: "client_credentials", client_id: API_Key, client_secret: Secret_Key, }); var access_token=token_Res.body.json().access_token; ``` #### 2.1 点击滑动操作 ```test //根据坐标点点击 click(x,y) //长按 press(x, y, 毫秒值) //滑动 swipe(x1, y1, x2, y2, 毫秒值) //模拟手势操作 gesture(毫秒值, [x1, y1], [x2, y2], …) //查看屏幕有这个文本吗 textContains("文本").exists() //点击这个文本 textContains(value).findOne().click() ``` #### 2.1 文件操作 files ```text ``` #### 获取控件文本 ``` var res = id("chatting_time_tv").findOne(); toast(res.text()); ``` ### 时间 ```text var date = new Date(); function getNowTime(){ var yy=date.getFullYear(); var MM=date.getMonth()+1; //使用三目运算符,判断是一位还是两位,不足补0,最后返回拼接字符串日期时间用-分割,毫秒使用.分割 MM= MM <10 ? "0" + MM:MM; var dd=date.getDate(); dd= dd<10? "0" + dd:dd; var HH=date.getHours(); HH=HH <10? "0" + HH:HH; var mm=date.getMinutes(); mm = mm< 10? "0"+ mm:mm; var ss=date.getSeconds(); ss=ss<10 ? "0"+ss:ss; var ms= date.getMilliseconds(); ms= ms< 100? "0"+ ms: ms; ms = ms< 10? "0"+ ms: ms; return yy + "" + MM + "" + dd + "-" + HH + "" + mm + "" + ss + "." + ms; } ``` ### 输入文本 配合剪切板实现输入: * setClip(text); * getClip()返回系统剪贴板内容 * UiObject.paste()对输入框控件进行粘贴操作 根据传入的参数来输入文本: * setText([i, ]text)将第i 个输入框的文本设置为text;不加参数i,则把所有输入框的文本都置为text * input([i, ]text)在将第i 个输入框原来的文本上追加文本text,不加参数i则会把所有输入框的文本追加内容text 上面介绍的是全局函数,下面是一些基于控件的操作: * UiObject.setText(text)设置输入框控件的文本内容,只对可编辑的输入框(editable为true)有效 * UiObject.setSelection(start, end)对输入框控件设置选中的文字内容 * UiObject.copy()对输入框文本的选中内容进行复制,只能用于输入框控件,并且当前输入框控件有选中的文本(可以通过setSelection()函数来设置输入框选中的内容) * UiObject.cut()对输入框文本的选中内容进行剪切,后面同上 * UiObject.paste()对输入框控件进行粘贴,粘贴剪贴板的内容 可以先写到粘贴板,长按 longClick 粘贴 ### 模块化 分为自己写的js 和 安卓自带的 自己写的 ```js var circle = require('circle.js'); console.log("半径为 4 的圆的面积是 %d", circle.area(4)); ``` 安卓自带 ```js importClass(android.view.animation.AnticipateInterpolator) ``` ### 悬浮窗 创建一个悬浮窗,基本上都是创建一个原始的悬浮窗,然后在上面加东西,里面传递的是一个 layout ```text var w = floaty.rawWindow( 悬浮文字 ); //悬浮窗在脚本关闭时会自动关闭 所以设置一个空的setInterval 让一直显示 setInterval(()=>{}, 1000); ``` #### layout 布局 详解 是ui 的一个 * frame: alpha 这个是透明度 0 代表透明 1 全黑 ```text ``` #### 1.1 设置可触摸移动 ```text //设置悬浮窗位置 w.setPosition(x, y) //记录按键被按下时的触摸坐标 var x = 0, y = 0; //记录按键被按下时的悬浮窗位置 var windowX, windowY; G_Y = 0 //记录按键被按下的时间以便判断长按等动作 var downTime; yd = false; win_1.logo.setOnTouchListener(function (view, event) { if (logo_buys) { return } log(event.getAction()) switch (event.getAction()) { case event.ACTION_DOWN: x = event.getRawX(); y = event.getRawY(); windowX = win_1.getX(); windowY = win_1.getY(); downTime = new Date().getTime(); return true; case event.ACTION_MOVE: if (logo_switch) { return true; } if (!yd) {//如果移动的距离大于h值 则判断为移动 yd为真 if (Math.abs(event.getRawY() - y) > 30 || Math.abs(event.getRawX() - x) > 30) { win_1.logo.attr("alpha", "1"); yd = true } } else {//移动手指时调整两个悬浮窗位置 win_1.setPosition(windowX + (event.getRawX() - x),//悬浮按钮定位 windowY + (event.getRawY() - y)); } return true; case event.ACTION_UP: //手指弹起 //触摸时间小于 200毫秒 并且移动距离小于30 则判断为 点击 if (Math.abs(event.getRawY() - y) < 30 && Math.abs(event.getRawX() - x) < 30) { toastLog("点击弹起") } } return true; }); ``` #### 1.2 点击图标功能页面 如果没有给绑定 setOnTouchListener 事件的话,那么想要点击出功能的话 基本上都是绑定 ```text win_1.logo.on("click", () => { toast("点击了"); }) ``` ### 存储 #### Storages - 本地存储 let stro = storages.create(name) stro.get(key); stro.put(key, value); stro.remove(key); #### files 文件 //覆盖写 files.write("文件路径","内容"); //追加写 files.append("文件路径",内容) ### ui ```text "ui"; ``` ### 打包软件 打包软件出去报毒,网上搜 说用mt改 autojs 关键字就行 但是也不大行,用 autox.js 也是不行 后面再找方法吧 用autopro ###