大学生
 
- 金币
- 890
- 好评
- 5
- 信誉
- 101
|
本帖最后由 樱落 于 2026-2-21 18:44 编辑
给大家写了一个autojs自动粘贴并发送的脚本,可以自动找到输入框并且自动粘贴,用处非常大,自选探索。
使用方法:需要先在粘贴内容里面加上需要粘贴的内容,然后选择第几个输入框
- "auto";
- // ========== 最终极速版 ==========
- // ========== 用户设置 ==========
- var LOGIN_X=980 // 发送按钮X坐标
- var LOGIN_Y=2120 // 发送按钮Y坐标
- var TPS=1000 // 每秒执行次数(大文件要降速)
- var THREADS=20 // 线程数量(大文件要降线程)
- var AUTO_SEND=false // true=自动点击发送 false=只粘贴
- var SEND_DELAY=1 // 点击前的延迟(毫秒)
- var TARGET_INDEX=0 // 第几个输入框(0是第一个)
- var LOOP_MODE=false // true=循环模式 false=单次模式
- var FLOAT_X=450 // 悬浮窗X坐标
- var FLOAT_Y=900 // 悬浮窗Y坐标
- // ========== 文件路径 ==========
- var SRC_FILE="/sdcard/js脚本/粘贴内容.txt" // 要粘贴的内容
- var USED_FILE="/sdcard/js脚本/已粘贴.txt" // 已粘贴的记录
- // ========== 全局变量 ==========
- var isRunning=false // 运行状态
- var workers=[] // 线程池
- var lock=threads.lock() // 进度锁
- var et=null // 输入框缓存
- var saveQueue=[] // 待保存队列
- var saveLock=threads.lock() // 队列锁
- var fileReader=null // 文件读取器
- var currentSeq=0 // 当前序号
- // ========== 获取输入框(只找一次) ==========
- function getEditText(){
- if(!et){
- var n=className("EditText").find()
- if(n.length>TARGET_INDEX) et=n[TARGET_INDEX]
- }
- return et
- }
- // ========== 初始化文件读取 ==========
- function initFileReader(){
- files.write(USED_FILE, "") // 清空已粘贴记录
- fileReader = open(SRC_FILE, "r") // 打开文件流
- currentSeq = 0
- }
- // ========== 读取下一行 ==========
- function readNextLine(){
- if(!fileReader) return null
- var line = fileReader.readline()
- if(line === null){ // 文件读完
- if(LOOP_MODE){
- fileReader.close()
- fileReader = open(SRC_FILE, "r") // 重新打开
- currentSeq = 0
- return readNextLine()
- }
- return null
- }
- line = line.trim()
- if(line == "") return readNextLine() // 跳过空行
- var result = {seq:currentSeq, value:line}
- currentSeq++
- return result
- }
- // ========== 保存线程(保证文件顺序) ==========
- function saverJob(){
- var lastSeq=-1 // 上次保存的序号
- var buffer=[] // 批量写入缓冲区
-
- while(isRunning || saveQueue.length>0){
- saveLock.lock()
- if(saveQueue.length>0){
- saveQueue.sort(function(a,b){ return a.seq - b.seq }) // 按序号排序
- while(saveQueue.length>0 && saveQueue[0].seq == lastSeq+1){
- buffer.push(saveQueue.shift().value) // 取出连续的数据
- lastSeq++
- }
- }
- saveLock.unlock()
-
- if(buffer.length>0){
- files.append(USED_FILE, buffer.join("\n")+"\n") // 批量写入
- buffer=[]
- }
- }
-
- // 关闭文件
- if(fileReader) fileReader.close()
- }
- // ========== 工作线程(只管粘贴) ==========
- function workerJob(){
- var period=1000/TPS // 每次粘贴的间隔时间
- var et=getEditText()
- if(!et) return
-
- while(isRunning){
- var itemData
- lock.lock()
- itemData = readNextLine()
- lock.unlock()
-
- if(!itemData){
- if(!LOOP_MODE) break
- continue
- }
-
- et.setText(itemData.value) // 粘贴到屏幕
- if(AUTO_SEND){ click(LOGIN_X, LOGIN_Y) } // 自动点击发送
-
- saveLock.lock()
- saveQueue.push({seq:itemData.seq, value:itemData.value}) // 交给保存线程
- saveLock.unlock()
-
- if(period>0) sleep(period) // 控制速度
- }
- }
- // ========== 悬浮窗 ==========
- var w=floaty.window(
- <frame id="main" bg="#8800FF00" w="60" h="60" radius="30">
- <text id="txt" text="贴" textSize="16" textColor="#000000" gravity="center"/>
- </frame>
- )
- w.setPosition(FLOAT_X, FLOAT_Y)
- var lastX=0,lastY=0,isDrag=false,downTime=0,tx=0,ty=0
- w.main.setOnTouchListener(function(view, event){
- var a=event.getAction(), x=event.getRawX(), y=event.getRawY()
- switch(a){
- case event.ACTION_DOWN:
- lastX=x; lastY=y; tx=x; ty=y; downTime=Date.now(); isDrag=false; return true
- case event.ACTION_MOVE:
- if(Math.abs(x-lastX)>5||Math.abs(y-lastY)>5){
- isDrag=true
- ui.run(function(){ w.setPosition(w.getX()+(x-lastX), w.getY()+(y-lastY)) })
- lastX=x; lastY=y
- }
- return true
- case event.ACTION_UP:
- var dur=Date.now()-downTime, dx=Math.abs(x-tx), dy=Math.abs(y-ty)
- if(!isDrag&&dx<10&&dy<10){
- if(dur>500){ // 长按切换循环/单次
- LOOP_MODE=!LOOP_MODE
- toast(LOOP_MODE?"循环模式":"单次模式")
- ui.run(function(){ w.txt.setText(LOOP_MODE?"循":"单") })
- }else if(isRunning){ // 短按暂停
- isRunning=false
- for(var i=0;i<workers.length;i++) workers[i].interrupt()
- workers=[]
- if(fileReader) fileReader.close()
- toast("暂停")
- }else{ // 短按启动
- isRunning=true
- workers=[]
- saveQueue=[]
- initFileReader() // 初始化文件读取
-
- workers.push(threads.start(saverJob)) // 启动保存线程
- for(var i=0;i<THREADS;i++){
- workers.push(threads.start(workerJob)) // 启动工作线程
- }
- toast("启动"+THREADS+"线程")
- }
- }
- isDrag=false; return true
- }
- return false
- })
- // ========== 初始化 ==========
- if(files.exists(SRC_FILE)){
- toast("文件存在,点击启动")
- } else {
- files.createWithDirs(SRC_FILE)
- toast("请先在"+SRC_FILE+"写入内容")
- }
- ui.run(function(){ w.txt.setText(LOOP_MODE?"循":"单") })
- // ========== 主循环 ==========
- while(true) sleep(1000)
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|