触动精灵脚本开发手册 您所在的位置:网站首页 触动精灵怎么用脚本 触动精灵脚本开发手册

触动精灵脚本开发手册

2024-06-11 14:33| 来源: 网络整理| 查看: 265

触动精灵脚本开发手册

已不更新,最新版本查看:https://helpdoc.touchsprite.com/dev_docs/598.html 开发手册 触动精灵

Windows 平台按 Ctrl + F 打开快捷搜索

Mac 平台按 command + F 打开快捷搜索

※右侧文本列表可以找到全部手册

目录

触动精灵脚本开发手册 目录 前言 学习前的准备 越狱及 root 常识 Lua 基础简明教程 脚本开发取色技巧 小白学触动零基础视频教程 触动精灵开发者指南 触动产品功能对比 如何查看更多文档 脚本开发相关工具 触动精灵 iOS 触动精灵 Android 脚本编辑器:TouchSprite Studio 抓色器:TSColorPicker 已兼容的模拟器 点击触摸 函数:touchDown、touchUp、touchMove 触摸点击、滑动 函数:catchTouchPoint 获取用户点击坐标 图色类及屏幕相关 函数:init 初始化 函数:getScreenSize 获取屏幕分辨率 函数:setScreenScale 坐标缩放 函数:keepScreen 保持屏幕 函数:getColor、getColorRGB 获取屏幕某点颜色值 函数:findColorInRegionFuzzy 区域模糊找色 函数:findImageInRegionFuzzy 区域模糊找图 函数:findMultiColorInRegionFuzzy 区域多点找色 函数:findMultiColorInRegionFuzzyExt 高级区域多点找色 函数:findImage 高级区域找图(仅支持 iOS) 函数:snapshot 截图 函数:imageOperMerge 图片合并 开发辅助类 函数:dialog 提示框 函数:toast 提示 函数:dialogRet 带按钮的对话框 函数:dialogInput 参数对话框 函数:initLog、wLog、closeLog 日志函数 函数:sysLog 系统日志(仅支持 iOS10 以下系统) 函数:nLog 远程日志 文件操作 函数:unzip 解压(仅支持 Android) 函数:zip 压缩(仅支持 Android) 脚本控制 函数:mSleep 延时 函数:lua_exit 退出脚本 函数:lua_restart 重载脚本 函数:luaExitIfCall 来电暂停 函数:checkScriptAuth 脚本类型和授权 系统相关 函数:getNetTime 获取网络时间 函数:addContactToAB 添加联系人 函数:removeAllContactsFromAB 清空通讯录 UTF-8 编码 模块说明 函数:utf8.char 整数序列转换字符串 函数:utf8.codes 获取字符编码 函数:utf8.codepoint 获取指定位置字符编码 函数:utf8.len 统计字符个数 函数:utf8.offset 获取字符位置 文字输入及按键模拟 函数:inputText 输入字符串 函数:switchTSInputMethod 切换到触动/帮你玩输入法(仅支持 Android) 函数:getInPutMethod 获取当前输入法包名(仅支持 Android) 函数:pressHomeKey 模拟主屏幕按键 函数:doublePressHomeKey 双击 HOME 键(仅支持 iOS) 函数:keyDown、keyUp 模拟键盘(仅支持 iOS) 命令: 安卓模拟物理按键(仅支持 Android) 应用相关 函数:runApp、closeApp 运行、关闭应用 函数:isFrontApp 判断前台应用 函数:frontAppBid 获取前台应用 函数:appBundlePath 获取应用安装路径 函数:appDataPath 获取应用数据路径 函数:appIsRunning 检测应用是否运行 函数:openURL 打开网络地址 函数:ipaInstall、ipaUninstall 安装、卸载应用(仅支持 iOS) 函数:install, uninstallApp 安装、卸载应用程序(仅支持 Android) 函数:getInstalledApps 获取应用列表 函数:isInstalledApk 查询应用程序是否安装(仅支持 Android) 函数:cleanApp 清理应用数据(仅支持 Android) 函数:switchApp 切换到指定应用(仅支持 Android) 函数:closeAllApp 清理后台应用(仅支持 Android) 函数:getAppInfo 获取指定应用的信息(仅支持 Android) 系统信息类 函数:getDeviceType 获取设备类型 函数:getDeviceID 获取触动精灵设备号 函数:getMemoryInfo 获取设备内存信息 函数:getTSVer、getOSVer 获取引擎版本号、获取系统版本号 函数:getOSType 获取设备系统 函数:getTSAccountID 获取触动账号 ID 函数:batteryStatus 检测电池状态、电量 函数:getProcess 获取设备进程列表 函数:getDeviceAlias 获取设备别名(仅支持 iOS 企业版) 函数:getDeviceName 获取设备名称 函数:setDeviceName 设置设备名称(仅支持 iOS) 函数:getIMEI 获取设备 IMEI(仅支持 Android) 函数:getNetworkIP 获取网络 IP(仅支持 Android) 函数:getDeviceBrand 获取设备品牌(仅支持 Android) 函数:getDeviceModel 获取设备型号(仅支持 Android) 函数:getCPUType 获取 CPU 型号(仅支持 Android) 函数:getUUID 获取 UUID(仅支持 Android) 函数:getSDCardPath 获取 SD 卡路径(仅支持 Android) 函数:getDPI 获取屏幕 DPI 和像素密度(仅支持 Android) 系统控制 函数:setRotationLockEnable 锁定设备方向(仅支持 iOS) 函数:setWifiEnable 无线开关 函数:setBTEnable 蓝牙开关 函数:setAirplaneMode 飞行模式开关 函数:getVPNStatus 获取VPN状态 函数:setVPNEnable VPN 开关(仅支持 iOS) 函数:setCellularDataEnable 蜂窝网络开关(仅支持 iOS) 函数:setAssistiveTouchEnable 小圆点开关(仅支持 iOS) 函数:setReduceMotionEnable 减弱动效开关(仅支持 iOS) 函数:getBacklightLevel 获取屏幕亮度 函数:setBacklightLevel 设置屏幕亮度 函数:setVolumeLevel 设置设备音量 函数:vibrator 手机振动 函数:playAudio 播放音频 函数:stopAudio 停止播放 (仅Android) 函数:lockDevice 锁定设备 函数:deviceIsLock 设备锁定状态 函数:unlockDevice 解锁设备 函数:setAutoLockTime 设置锁屏时间 函数:resetIDLETimer 重置锁屏计时 函数:setScreenResolution 修改分辨率(仅支持 iOS) 函数:clearKeyChain 清除钥匙串(仅支持 iOS) 函数:saveImageToAlbum 图片存入相册 函数:saveVideoToAlbum 视频存入相册 命令: 安卓视频存入相册 函数:writePasteboard、readPasteboard 读写剪贴板 函数:connectToWifi 连接 WiFi 回调函数 函数:beforeUserExit 终止之前运行 文字识别 函数:ocrText 本地光学字符识别 函数:addTSOcrDict、addTSOcrDictEx、tsOcrText、tsFindText 触动点阵识别 函数:addDmOcrDict、dmOcrText、dmFindText 打码点阵识别 触动相关 函数:deviceIsAuth 获取触动精灵授权状态(仅支持 iOS) 函数:getRunningAccess 获取当前脚本运行权限(仅支持 Android) 函数:userPath 获取客户端文件路径 函数:whoAmI 检测触动产品类型 函数:showFloatButton 显示、隐藏悬浮条 命令: 强制重启触动服务 Thread 协程 函数:thread.create 创建协程 函数:thread.createSubThread 创建子协程 函数:thread.stop 停止协程队列 函数:thread.wait 阻塞等待当前协程完成 函数:thread.setTimeout 设置协程超时时间 函数:thread.clearTimeout 清除协程超时时间 函数:thread.waitAllThreadExit 协程阻塞等待 浮动窗口 函数:fwShowWnd 显示浮动窗口 函数:fwShowTextView 显示文字视图 函数:fwShowImageView 显示图形视图 函数:fwCloseView 关闭视图 函数:fwCloseWnd 关闭窗口 函数:fwGetWndPos 获取窗口位置 函数:fwShowButton 显示一个按钮 函数:fwGetPressedButton 获取按钮点击事件 完整实例 脚本 UI showUI 什么是 json 调用示例 用 json 创建界面 全局属性 控件通用属性 界面控件 控件:Label 标签 控件:RadioGroup 单选框 控件:Edit 单行文本框 控件:TextArea 多行文本框 控件:CheckBoxGroup 多选框 控件:ComboBox 下拉框 控件:Image 图片 默认样式 指定控件尺寸与位置 返回值 自定义样式实例代码 webUI(暂不支持 iOS 7 系统) 函数: webview.new 创建 webview 函数: myweb1.show 显示webview 函数: myweb1.set 改变 webview 外观 函数: myweb1.close 关闭 webview 函数: event.register 发送消息,传递参数 完整示例 为触动增加无限可能,Lua扩展库 触动精灵 TSLib 函数扩展库 云打码扩展库 触动精灵云打码 使用方法 插件下载 函数:ocr.cloudOcrText、ocr.cloudOcrReportError、ocr.version 简易 SMTP 邮件发送库 函数:mail.send 触动精灵中 "os.execute" 应用 respring 注销 poweroff 关机 reboot 重启 clearCache 清空缓存 delFile 删除文件 unzip 解压 movefile 移动文件 copyfile 复制文件 newfolder 创建文件夹 触动精灵中"io库"应用 readFile 将指定文件中的内容按行读取 getList 遍历文件 findFile 查找文件 file_exists 检测指定文件是否存在 函数:qrDecode 二维码解析(仅支持 Android) 触动精灵二维码识别库 函数: qr.qrDecode 二维码图片解析(仅支持iOS) 触动精灵ts.so扩展库 触动精灵sz扩展库 附录 iOS 设备分辨率一览表 Lua math 库 已知与触动精灵/帮你玩/小精灵/企业版 iOS 冲突的插件列表 约定的按键编码 电话功能按键 控制类按键 基本类按键 安卓手机如何开启系统悬浮窗权限 设备 SSH 连接工具 相关工具运行库 LuaSQLite iOS 系统设置参数对照表 按键码表[字母] 按键码表[数字] 按键码表[其他] 按键码表[更多请自行尝试] 前言

       触动精灵是一款模拟手机触摸、按键操作的软件。通过制作脚本,可以让触动精灵代替双手,自动执行一系列触摸、按键操作。触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本;只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。

       触动精灵采用 Lua 脚本语言作为底层语言,支持 Lua 5.2.3 版本的所有语法与基本函数,并在其的基础上添加了一些扩展函数,用于取色、找色、找图、发送触摸事件等高级功能的实现。

用户在阅读本函数说明前,请参考 Lua 的官方手册以及相关资料,学习以下基本语法:

        - 注释         - 变量与类型         - 运算符         - 条件、循环控制         - 函数定义         - 库函数         - ……

       本说明仅供初等文化水平以上的、了解计算机编程基本原理的个体学习与参考,并不适用于零基础的编程入门者学习编程基本知识。严禁用于商业以及非法目的,严禁转载、抄袭、未经许可地引用。 为了便于解释和描述,本说明中采用了一些非专业的描述与形容方法(如:number),敬请理解。因编写校对仓促,如有错误欢迎及时指正,本文中的示例仅供函数参考,不要直接用于脚本中。

重要提示: Lua 官方手册:http:/http://manual.luaer.cn/ Lua 中文开发手册:http://book.luaer.cn/ Lua 基础简明教程:https://zybuluo.com/lisaisacat/note/636399 触动精灵的脚本开发、存储过程必须使用 UTF-8 文本编码,如果您出现脚本中文无法正常显示与处理,请在您使用的编辑器或 IDE 中设置文本编码为 UTF-8,谢谢。

学习前的准备越狱及 root 常识 在学习脚本开发之前,首先要具备一些关于 iOS 越狱和安卓 root 的知识,以及触动精灵的常用信息 文档链接:https://www.zybuluo.com/lisaisacat/note/324664 看了上面的文档,你可以具备以下知识: 什么样的手机适合用来做脚本开发 拿到一台越狱手机之后应该做什么才能避免白苹果和报错 Cydia 不见了或者已安装界面空白该怎么办 为什么安装插件总是报错呢 Lua 基础简明教程 首先你需要了解 Lua 这门语言的一些基础知识,什么是循环,什么是函数,布尔型和数值型分别是什么意思,才有可能看得懂下面的教程和手册。 文档地址:https://www.zybuluo.com/lisaisacat/note/636399 脚本开发取色技巧 新手在学习使用触动精灵开发脚本的时候,总会进入一些误区,或者会有一些迷惑的点,觉得无从下手,本文总结了一些自己在学习过程中遇到的问题和经验技巧,欢迎大家一起交流分享。 文档链接:https://zybuluo.com/lisaisacat/note/508345 看了上面的文档,你可以具备以下知识: 透明背景图、动图、带动画的界面应该怎么取色 找色和找图哪个更好用 函数封装是什么 脚本报错了怎么办 小白学触动零基础视频教程 如果你没有任何编程基础,可以先看一下零基础教学视频:https://www.zybuluo.com/lisaisacat/note/585252 看了上面的文档,你可以具备以下知识: deb 插件安装方法 平刷插件 Cydia Eraser SSH 命令工具 putty 触动精灵的安装使用及常识 抓色器和编辑器的使用及常识 同样的脚本为什么有的手机运行异常 showUI 返回值的调用 showUI 应该怎么写才简洁好用 大漠字库工具的用法 触动精灵开发者指南 由于触动精灵在线文档数量较多,很多人不知道如何查询,现建立此文档做为索引,其中会补充一些软件使用的常用信息。 触动精灵旗下目前有四款软件:触动精灵(iOS/Android)、帮你玩商城(iOS/Android)、小精灵(iOS/Android)、企业版(iOS/Android)。 触动精灵适合开发者和有中控开发能力的工作室使用 小精灵适合有图标和包名自定义需求的开发者和工作室使用 企业版适合有批量控制设备需求的工作室使用 文档地址:https://www.zybuluo.com/miniknife/note/509515 触动产品功能对比 产品名称 自定义图标 录制 调试 运行源码 授权 批量控制 支持平台 开发者平台 触动精灵iOS × √ √ √ iOS:36 元/台/年,Android:免费 购买 API 自行开发 iOS/Android http://dev.touchsprite.com/site/index 触动小精灵 √ × × × 5.5 元/台/月 购买 API 自行开发 iOS/Android http://app.touchsprite.com/ 触动企业版 × × × √ iOS:46 元/台/年,Android:测试期 0.1 元/台/年 免费 iOS/Android http://ent.touchsprite.com/

安卓小精灵有免费版,但不能使用网络模块和高级函数库 安卓企业版测试期收费:0.1 元/台/年

如何查看更多文档

在文档右侧栏顶部点击文档分类菜单栏按钮,即可查看触动精灵所有在线文档。 此处输入图片的描述

脚本开发相关工具

       工欲善其事,必先利其器,在学习触动精灵脚本编写前我们需要下载安装一些辅助工具来完成脚本编写,包含但不限于以下工具:

触动精灵 iOS

使用教程:https://www.zybuluo.com/miniknife/note/307627 官方源地址:http://apt.touchsprite.com 测试源地址:http://apt-test.touchsprite.com 脚本存放路径:/var/mobile/Media/TouchSprite/lua 默认资源路径:/var/mobile/Media/TouchSprite/res 脚本日志路径:/var/mobile/Media/TouchSprite/log 配置文件路径:/var/mobile/Media/TouchSprite/config

触动精灵 Android

使用教程:https://www.zybuluo.com/miniknife/note/443534 下载地址:http://www.touchsprite.com/touchsprite 脚本存放路径:/sdcard/TouchSprite/lua 默认资源路径:/sdcard/TouchSprite/res 脚本日志路径:/sdcard/TouchSprite/log 配置文件路径:/sdcard/TouchSprite/config iOS插件文件路径:/sdcard/TouchSprite/plugin Android插件文件路径:data/data/com.touchsprite.android/files/plugin

※安卓不同机型路径有差别,请用userPath函数获取路径

注意事项

有些函数不支持低版本触动精灵,请仔细阅读函数说明并尽量保持触动精灵客户端为最新版。 测试版为不稳定版本,为避免不必要的麻烦,请勿大规模安装。 测试版和正式版的 Bundle ID 不同,不能跨源覆盖安装或直接升级,请卸载之后再安装另一个源的版本。 iOS 11 系统的设备,原 TouchSprite 文件夹下新增 plugin_ios11 快捷方式,连接到 usr/bin/tsplugin 如果系统是 iOS 11 则 tsp 自带 so 文件释放到该路径但 lua 文件释放路径保持不变 如果开发者想要手动导入 so 文件,也需要放到 usr/bin/tsplugin 目录下 脚本编辑器:TouchSprite Studio

支持函数自动补全、函数提示、关键字高亮、文件传送、远程运行、自动缩进等常用功能,已内置所有至最新 2.3.6 版本触动精灵扩展函数,推荐使用。 下载地址:http://www.touchsprite.com/tools 使用手册:https://www.zybuluo.com/miniknife/note/123055 视频教程:https://www.zybuluo.com/lisaisacat/note/324664#编辑器与抓色器的使用

抓色器:TSColorPicker

一个趁手的抓色器可以让你的脚本开发过程变的轻松愉快,在此强烈推荐触动抓色器,快捷抓点、一键生成代码、远程抓屏,让你如虎添翼。具体使用方法请阅读压缩包内附带的说明(远程抓屏功能需使用触动精灵iOS v2.1.5 以上版本)。 下载地址:http://www.touchsprite.com/tools 使用手册:https://www.zybuluo.com/havonz/note/94681 视频教程:https://www.zybuluo.com/lisaisacat/note/324664#编辑器与抓色器的使用

已兼容的模拟器

雷电模拟器、猩猩模拟器、网易MUMU模拟器、夜神模拟器、海马玩模拟器、逍遥模拟器、51 模拟器 模拟器使用教程:https://www.zybuluo.com/miniknife/note/443336 从系统兼容和资源占用角度考虑,推荐使用雷电模拟器、夜神模拟器。

点击触摸函数:touchDown、touchUp、touchMove 触摸点击、滑动 函数名称:触摸按下、抬起、移动 函数功能:通过按下、抬起、移动动作发送触摸事件。 函数方法 touchDown(index , x , y); touchMove(index , x, y); touchUp(index , x , y); 返回值:无 参数 类型 说明 index number 手指序号(可省略) x number 屏幕横坐标 y number 屏幕纵坐标

脚本实例: 快速划动

touchDown(150, 550); --在坐标 (150, 550)按下mSleep(30);touchMove(150, 600); --移动到坐标 (150, 600),注意一次滑动的坐标间隔不要太大,不宜超过 50 像素mSleep(30);touchUp(150, 600); --在坐标 (150, 600) 抬起

连续划动

touchDown(150, 550); --在坐标 (150, 550) 按下for i = 0, 200, 10 do --使用 for 循环从起始点连续横向移动到终止点 touchMove(150 + i, 550); mSleep(10); --延迟endtouchUp(150 + 200, 550); --在坐标 (350, 550) 抬起

精准滑动 方法一:

--精准滑动的原理就是通过向滑动方向的垂直线方向移动 1 像素来终止滑动惯性--简单的垂直精准滑动touchDown(200,1000)for i = 0, 500, 50 do touchMove(200, 1000-i) mSleep(10)end--只要横向滑动 1 像素就可以精准滑动--横向滑动 1 像素touchUp(201, 500) mSleep(10)

方法二:

--使用 v1.2.7 版本 TSLib 新增的 touch() 函数进行滑动require("TSLib")touch():Step(50):on(200,1000):move(200,500):off()--减少步长也可以进行精准滑动

多点触控

touchDown(1, 200, 400); --手指 1 在坐标 (200, 400) 按下touchDown(2, 300, 500); --手指 2 在坐标 (300, 500) 按下mSleep(50);for i = 1, 100, 1 do --使用 for 循环使两只手指同时分离 touchMove(1, 200 - i, 400 - i); touchMove(2, 300 + i, 500 + i); mSleep(10);endtouchUp(1, 200 - 100, 400 - 100); --抬起手指 1touchUp(2, 300 + 100, 500 + 100); --抬起手指 2

封装一个点击函数

function click(x, y) touchDown(x, y) mSleep(30) touchMove(x, y) -- 安卓部分机型单点不生效的情况下可以加上此句 touchUp(x, y)endclick(100, 200) --点击坐标 100,200 位置

方形渐开线

init(1)mSleep(1000)local x = 1010 --起始坐标 xlocal y = 698 --起始坐标 ylocal v = 30 --两点间距离touchDown(x, y)mSleep(100)for var = 1,20 do j = 0 k = v for _i = 1,2 do for i = 1,10 do x = x + j y = y + k touchMove(x, y) mSleep(20) end j = v k = 0 end v = v * (-1.05)endtouchUp(x, y)

圆形渐开线

init(1)mSleep(1000)local x0 = 1010 --起始坐标 xlocal y0 = 698 --起始坐标 ylocal rr = 20 --设置递增半径 local l = 10 --设置点间距 local p = 0 --初始化角度 local r = 30 --设置首圈半径local rn = 10 --设置圈数touchDown(x0, y0)mSleep(100)for var = 1,rn do while p 应用ID查询 中能查看到应用程序的 Bundle ID; 2. iOS 使用 iFile、PP助手等软件可查看应用文件夹下的 Info.plist,其中的 CFBundleIdentifier 即为该应用的 Bundle ID。 3. 使用 frontAppBid 函数,前台运行要获取 Bundle ID 的应用,运行此函数并用 diolag、toast、nLog 函数显示返回值。

函数:getScreenSize 获取屏幕分辨率 函数名称:获取屏幕分辨率,取分辨率 函数功能:用于获取设备屏幕的分辨率,用来判断坐标系的使用。 函数方法 width,height = getScreenSize(); 返回值:number width,height 返回值 类型 说明 width number 获取到的屏幕宽度 height number 获取到的屏幕高度

脚本实例: 根据分辨率判断脚本是否适配

width, height = getScreenSize();if width == 640 and height == 1136 then --iPhone SE, 5, 5S, iPod touch 5dialog("iPhone SE, 5, 5S, iPod touch 5")elseif width == 640 and height == 960 then --iPhone 4,4S, iPod touch 4dialog("iPhone 4,4S, iPod touch 4")elseif width == 320 and height == 480 then --iPhone 非高分屏dialog("iPhone 非高分屏")elseif width == 768 and height == 1024 then --iPad 1,2, mini 1dialog("iPad 1,2, mini 1")elseif width == 1536 and height == 2048 then --iPad 3,4,5, mini 2dialog("iPad 3,4,5, mini 2")elseif width == 1080 and height == 1920 thendialog("小米 4,华为荣耀 6p 等")elseif width == 720 and height == 1280 thendialog("红米 note2 等")elseif width == 768 and height == 1280 thendialog("魅蓝等")elseif width == 800 and height == 1280 thendialog("三星 N5100 等")elseif width == 480 and height == 800 thendialog("酷派 8017-T00 等")end

注意事项:

统一为 iOS 竖屏(Home 键在下方时)、安卓初始方向屏幕的宽度和高度。 部分安卓设备存在无法获取到屏幕分辨率的问题,需要在脚本中判断如果返回值小于 0 则指定一个固定的宽高。 函数:setScreenScale 坐标缩放 函数名称:坐标缩放 函数功能:用于对屏幕坐标进行缩放,可直接影响点击、取色、找色函数中的坐标参数。 支持版本:引擎版本 iOS v2.2.7,Android v1.2.8 以上 函数方法 setScreenScale(flag, width, height); 返回值:无 参数 类型 说明 flag boolean true - 打开,false - 关闭 width number 基准屏幕的宽度 height number 基准屏幕的高度

脚本实例:

setScreenScale(true, 750, 1334) --以 750,1334 分辨率为基准坐标进行缩放--[[ 当此函数打开时,将影响点击、取色、单点模糊找色函数 ]]setScreenScale(false) --关闭缩放

注意事项:

当此函数打开时,受影响的函数为点击和单点找色函数:touchDown touchUp touchMove getColor getColorRGB findColorInRegionFuzzy snapshot 多点找色函数不受此函数影响 当两个设备宽高比相差较大时,此函数转换后的效果较差 函数:keepScreen 保持屏幕 函数名称:保持屏幕,保持图像 函数功能:在脚本中保持当前屏幕内容不变,多次调用取色、找色、截图、找图等函数时,直接调用保持的内容。该函数为优化类函数,能够为大量的静态图像处理函数提供性能优化。 函数方法 keepScreen(flag); 返回值:无 参数 类型 说明 flag boolean 保持开关

脚本实例: 遍历屏幕区块

keepScreen(true); --打开保持屏幕,当参数为 true 时启用屏幕保持,运行到该函数时内存中的屏幕图像保持在这一时刻for k = 1, 640, 10 do for j = 1, 960, 10 do --格式化为十六进制文本 color = string.format("%X", getColor(k, j)); --输出到本地日志 nLog("("..k..", "..j..") Color: "..color.."."); endendkeepScreen(false); --关闭保持屏幕,当参数为 false 时关闭屏幕保持,释放内存中的屏幕图像,以备下一次继续保持。

注意事项:

据不完全统计,与不使用该函数相比,使用此函数会使普通屏上脚本取色速率提升 100 倍,高分屏上脚本取色速率提升 50 倍。在执行大量静态图像操作时,请务必使用该函数优化脚本性能。 该函数一般用于画面变动节奏较慢,但需要根据大量取色、找色来完成计算和操作的脚本中,例如"天天爱消除"、"天天星连萌"这样的游戏。

名词解析:

静态图像处理,指可在某一状态下屏幕内容保持到内存(不影响显示),对其进行进一步的 多次分析。否则,每次使用图像类函数,都将截取一次屏幕内容。 保持开关,逻辑型只有两种属性:true 为真,false 为假。

注意事项:

当使用 keepScreen(true); 时启用屏幕保持,运行到该函数时内存中的屏幕图像保持在这一时刻。 当使用 keepScreen(false); 时关闭屏幕保持,释放内存中的屏幕图像,以备下一次继续保持。 函数:getColor、getColorRGB 获取屏幕某点颜色值 函数名称:获取颜色、获取颜色RGB 、取色 函数功能:获取某一点的颜色值(RGB)、颜色 R,G,B 值。 函数方法 color = getColor(x, y); 返回值 1 整型 color color_r, color_g, color_b = getColorRGB(x, y); 返回值 2 整型 color_r, color_g, color_b 参数 类型 说明 x number 将获取颜色值的屏幕横坐标 y number 将获取颜色值的屏幕纵坐标 返回值 类型 说明 color number 该点的十进制颜色值RGB color_r, color_g, color_b number 该点颜色的 RGB 值

脚本实例: 如果某点符合某颜色则点击

color = getColor(100, 100); --获取 (100,100) 的颜色值,赋值给 color 变量if color == 0xffffff then --如果该点的颜色值等于 0xffffff touchDown(100, 100); --那么点击该点 mSleep(30); touchUp(100, 100);end

--亦可写作

if getColor(100, 100) == 0xffffff then touchDown(100, 100); mSleep(30); touchUp(100, 100);end

如果某点的颜色与某颜色相似则点击

r,g,b = getColorRGB(100,100); --获取(100, 100)的颜色值,赋值给 color 变量if r > 200 and g = 170 and sysint >= 701 then init(0);else dialog("本脚本不支持您的触动精灵引擎版本或系统版本,请尽快升级!", 5); lua_exit();end

名词解析:

string.sub 为Lua基本函数,属于字符串处理函数库,详情请参阅相关文档。 tonumber 为 Lua 基本函数,属于类型转换函数库,详情请参阅官方文档。

注意事项:

此函数适用于触动精灵、企业版和帮你玩脚本商城、小精灵客户端,在不同的客户端下运行获取的都是触动引擎版本号而不是客户端版本号。

函数:getOSType 获取设备系统 函数名称:获取设备系统 函数功能:获取设备系统类型是 iOS 还是 Android 支持版本:iOS 引擎版本 v2.1.6,Android v1.0 以上 函数方法 os_type = getOSType(); 返回值:string os_type 返回值 类型 说明 os_type string 返回设备的系统类型 iOS、android

脚本实例: 判断系统是否符合要求

os_type = getOSType(); --获取设备系统版本if os_type == "android" then --返回值为纯小写字母 dialog("欢迎使用触动精灵安卓版")else dialog("欢迎使用触动精灵 iOS 版")end

注意事项:

返回值为纯小写字母 函数:getTSAccountID 获取触动账号 ID

方法名称:获取触动账号 ID(仅支持触动精灵 Android v2.3.6 以上版本) 方法功能:获取触动账号 ID 调用方法 ID = getTSAccountID()

返回值 类型 说明 ID string 未登录账号使用此函数返回为空,登录账号后会返回触动账号 ID

脚本实例:

ID = getTSAccountID()dialog(ID)函数:batteryStatus 检测电池状态、电量 函数名称:检测电池状态、电量 函数功能:用于判断当前设备充电状态及电量。 支持版本:引擎版本 iOS v2.3.3,Android v2.0.0 以上 函数方法 retTable = batteryStatus(); 返回值:Table型 retTable 返回值 类型 说明 retTable.charging number 0 - 未充电;1 - 充电状态 retTable.level number 当前设备剩余电量,范围:0 - 100

脚本实例:

t = batteryStatus(); if t.charging == 1 then dialog("正在充电", time)else dialog("未充电", time)endmSleep(1000)dialog("剩余电量"..t.level.."%")

注意事项:

此函数在安卓模拟器上显示充电状态为电量100。 函数:getProcess 获取设备进程列表 函数名称:获取设备进程列表 函数功能:用于获取当前设备的所有进程列表并返回一个table。 支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上 函数方法 idList = getProcess(); 返回值: idList 返回值 类型 说明 idList[n].id number 进程ID idList[n].name string 进程名称

脚本实例:

str = getProcess()text = "设备进程列表 总数 : " .. #str .. "\r\n"for _,v in ipairs(str) do text = text .. v.id.." : "..v.name .. "\r\n"enddialog(text)函数:getDeviceAlias 获取设备别名(仅支持 iOS 企业版) 函数名称:获取设备别名 函数功能:用于获取触动精灵企业版的设备别名。 支持版本:企业版引擎版本 iOS v2.3.3 以上 函数方法 ret = getDeviceAlias(); 返回值:ret 返回值 类型 说明 ret string 当前安装过触动精灵企业版的设备别名

注意事项:

此函数仅适用于触动精灵企业版。 函数:getDeviceName 获取设备名称 函数名称:获取设备名称 函数功能:用于获取设备设置中的名称。 支持版本:引擎版本 iOS v2.3.9,Android v2.2.1 以上 函数方法 str = getDeviceName(); 返回值:str 返回值 类型 说明 name string 获取到的设备名 函数:setDeviceName 设置设备名称(仅支持 iOS) 函数名称:设置设备名称 函数功能:用于设置修改设备设置中的名称。 支持版本:引擎版本 iOS v2.3.9 以上 函数方法 setDeviceName(string str); 返回值:无 参数 类型 说明 name string 要设置的设备名 函数:getIMEI 获取设备 IMEI(仅支持 Android) 函数名称:获取设备 IMEI 函数功能:用于获取设备 IMEI 也就是Android ID 支持版本:引擎版本 Android v2.1.0 以上 函数方法 imei = getIMEI(); 返回值:imei 返回值 类型 说明 imei string 返回设备 IMEI,设备是模拟器时返回 nil

脚本实例:

local imei = getIMEI();if imei == nil and imei == 000000000000000 then dialog("该设备是模拟器或获取 IMEI 失败");else dialog(imei);end函数:getNetworkIP 获取网络 IP(仅支持 Android) 函数名称:获取网络 IP 函数功能:用于获取手机网络 IP 支持版本:引擎版本 Android v2.1.1以上 函数方法 ip = getNetworkIP(); 返回值:ip 返回值 类型 说明 ip string 返回设备网络 IP,不打开 WiFi 会显示异常,暂不支持模拟器。

脚本实例:

-- 不打开 WiFi 会显示异常,暂不支持模拟器ip = getNetworkIP();dialog(ip);函数:getDeviceBrand 获取设备品牌(仅支持 Android) 函数名称:获取设备品牌 函数功能:用于获取设备品牌 支持版本:引擎版本 Android v2.1.1以上 函数方法 brand = getDeviceBrand(); 返回值:brand 返回值 类型 说明 brand string 返回设备品牌

脚本实例:

brand = getDeviceBrand()dialog(brand);函数:getDeviceModel 获取设备型号(仅支持 Android) 函数名称:获取设备型号 函数功能:用于获取设备型号 支持版本:触动精灵Android v2.1.1 以上 函数方法 model = getDeviceModel(); 返回值:model 返回值 类型 说明 deviceModel string 返回设备型号

脚本实例:

model = getDeviceModel()dialog(model);函数:getCPUType 获取 CPU 型号(仅支持 Android) 函数名称:获取CPU型号 函数功能:用于获取CPU型号 支持版本:引擎版本 Android v2.1.1 以上 函数方法 cpu = getCPUType(); 返回值:string cpu 返回值 类型 说明 cpu string 返回设备 CPU 型号

脚本实例:

cpu = getCPUType()dialog(cpu);函数:getUUID 获取 UUID(仅支持 Android) 函数名称:获取 UUID 函数功能:用于获取设备UUID 支持版本:引擎版本 Android v2.1.1以上 函数方法 uuid = getUUID(); 返回值:uuid 返回值 类型 说明 uuid string 返回设备 UUID

脚本实例:

uuid = getUUID()dialog(uuid);函数:getSDCardPath 获取 SD 卡路径(仅支持 Android) 函数名称:获取 SD 卡路径 函数功能:获取设备 SD 卡路径 函数方法 sdPath = getSDCardPath(); 返回值:sdPath 返回值 类型 说明 sdPath string 返回设备 SD 卡路径,无 SD 卡时返回 nil

脚本实例:

local sdPath = getSDCardPath();if sdPath == nil then dialog("该设备没有 SD 卡");else dialog(sdPath);end函数:getDPI 获取屏幕 DPI 和像素密度(仅支持 Android) 函数名称:获取屏幕 DPI 和像素密度 支持版本:引擎版本 Android v2.0.3 以上 函数方法 dpi,density = getDPI(); 返回值:dpi,density 返回值 类型 说明 dpi number 屏幕密度(每寸像素:120/160/240/320) density number 屏幕密度(像素比例:0.75/1.0/1.5/2.0) 系统控制函数:setRotationLockEnable 锁定设备方向(仅支持 iOS) 函数名称:设备方向锁定 函数功能:用于设置是否开启手机的锁定方向功能 支持版本:引擎版本 iOS v2.3.9 以上 函数方法 setRotationLockEnable(逻辑型 flag); 返回值:无 参数 类型 说明 flag boolean 打开方向锁定 - true;关闭方向锁定 - false

脚本实例:

setRotationLockEnable(true); --打开方向锁定setRotationLockEnable(false); --关闭方向锁定函数:setWifiEnable 无线开关 函数名称:无线开关 函数功能:用于设置是否打开无线开关 支持版本:引擎版本 iOS v1.0,Android v1.3.0以上 函数方法 setWifiEnable(flag); 返回值:无 参数 类型 说明 flag boolean 打开 WiFi - true;关闭 WiFi - false

脚本实例:

setWifiEnable(true); --打开 WifisetWifiEnable(false); --关闭 Wifi函数:setBTEnable 蓝牙开关 函数名称:蓝牙开关 函数功能:用于设置是否打开蓝牙开关 支持版本:引擎版本 iOS v2.1.8,Android v1.3.0 以上 函数方法 setBTEnable(flag); 返回值:无 参数 类型 说明 flag boolean 打开蓝牙 - true;关闭蓝牙 - false

脚本实例:

setBTEnable(true); --打开蓝牙setBTEnable(false); --关闭蓝牙函数:setAirplaneMode 飞行模式开关 函数名称:飞行模式开关 函数功能:用于设置是否打开飞行模式开关 支持版本:引擎版本 iOS v2.1.8,Android v2.0.2 以上 函数方法 setAirplaneMode(flag); 返回值:无 参数 类型 说明 flag boolean 打开飞行模式 - true;关闭飞行模式 - false

脚本实例:

setAirplaneMode(true); --打开飞行模式setAirplaneMode(false); --关闭飞行模式函数:getVPNStatus 获取VPN状态 函数名称:获取 VPN 状态 函数功能:用于获取 VPN 当前连接状态并返回一个 table 支持版本:引擎版本 iOS v2.3.6,Android v2.0.5 以上 函数方法 flag = getVPNStatus(); 返回值:flag 返回值 类型 说明 flag.active boolean true - 打开;false - 关闭 flag.status string 连接状态本地化字符串,不同语言下字符串不同(仅支持 iOS)

脚本实例:

flag = getVPNStatus()if flag.active then dialog("打开状态"..flag.status)--flag.status 仅支持 iOS 系统else dialog("关闭状态"..flag.status)--flag.status 仅支持 iOS 系统end

注意事项:

如系统中没有已经建立好 的VPN 连接,调用此函数将不会产生任何效果。 安卓没有 flag.status 字段。 函数:setVPNEnable VPN 开关(仅支持 iOS) 函数名称:VPN 开关 函数功能:用于设置是否打开系统 VPN 开关 支持版本:引擎版本 iOS v2.3.6 以上 函数方法 setVPNEnable(flag); 返回值:无 参数 类型 说明 flag boolean 打开VPN默认连接 - true;关闭VPN默认连接 - false

注意事项:

如系统中没有已经建立好的 VPN 连接,调用此函数将不会产生任何效果。 函数:setCellularDataEnable 蜂窝网络开关(仅支持 iOS) 函数名称:蜂窝网络开关 函数功能:用于设置是否打开蜂窝网络开关 支持版本:引擎版本 iOS v2.3.6 以上 函数方法 setCellularDataEnable(flag); 返回值:无 参数 类型 说明 flag boolean 打开蜂窝网络 - true;关闭蜂窝网络 - false 函数:setAssistiveTouchEnable 小圆点开关(仅支持 iOS) 函数名称:小圆点开关 函数功能:用于设置是否打开小圆点开关 支持版本:iOS 引擎版本 v2.3.9 以上 函数方法 setAssistiveTouchEnable(逻辑型 flag); 返回值:无 参数 类型 说明 flag boolean 打开小圆点 - true;关闭小圆点 - false 函数:setReduceMotionEnable 减弱动效开关(仅支持 iOS) 函数名称:减弱动效开关 函数功能:用于设置是否打开减弱动画效果开关 支持版本:引擎版本 iOS v2.3.9 以上 函数方法 setReduceMotionEnable(flag); 返回值:无 参数 类型 说明 flag boolean 打开减弱动画效果 - true;关闭减弱动画效果 - false

注意事项:

打开此开关对找色影响很大,请谨慎使用。

函数:getBacklightLevel 获取屏幕亮度 函数名称:获取屏幕亮度 函数功能:用于获取设备屏幕亮度值 支持版本:引擎版本 iOS v2.3.6,Android v2.0.6 以上 函数方法 light = getBacklightLevel(); 返回值:level 返回值 类型 说明 light number 获取到的屏幕亮度值,范围 0 - 1 函数:setBacklightLevel 设置屏幕亮度 函数名称:设置屏幕亮度 函数功能:用于设置设备屏幕亮度值 支持版本:引擎版本 iOS v2.3.6,Android v2.0.6 以上 函数方法 setBacklightLevel(数值型 light); 返回值:无 参数 类型 说明 light 数值型 要设置的屏幕亮度值,范围 0 - 1 函数:setVolumeLevel 设置设备音量 函数名称:设置设备音量 函数功能:设置设备音量大小 支持版本:引擎版本 iOS v2.3.6,Android v2.0.5 以上 函数方法 setVolumeLevel(vol); 返回值:无 参数 类型 说明 vol number 要设置的设备音量,范围 0 - 1

注意事项:

此函数将同步改变系统中所有音量。 函数:vibrator 手机振动 函数名称:手机振动,震动 函数功能:使手机振动一次。 函数方法 vibrator(); 返回值:无

函数实例: 警报

for var = 1,5 do vibrator(); --振动 mSleep(1000); --延迟 1 秒end

注意事项:

频繁调用该函数可能会减少电池寿命,请谨慎使用。 使用此函数需在系统设置里打开震动选项。 函数:playAudio 播放音频 函数名称:播放音频 函数功能:在后台播放指定的声音文件。 函数方法 playAudio(filename); 返回值:无 参数 类型 说明 filename string 音频文件名,支持 mp3、m4a、m4r、ogg、wav,iOS填写“”停止播放

脚本实例:

playAudio("test.mp3"); --播放 test.mp3mSleep(10000)playAudio(""); --iOS停止播放,Android参考stopAudio函数。

注意事项:

音频文件路径请用 userPath 函数获取,自建目录请填写相对路径。 如音频放置在默认资源目录,参数中可直接填写文件名。 函数:stopAudio 停止播放 (仅Android) 函数名称:停止播放 函数功能:在后台停止指定的声音文件。 函数方法 stopAudio(); 返回值:无

脚本实例:

playAudio("test.mp3"); --播放 test.mp3mSleep(10000)stopAudio(); --停止播放

注意事项:

音频文件路径请用 userPath 函数获取,自建目录请填写相对路径。 如音频放置在默认资源目录,参数中可直接填写文件名。 脚本终止将直接导致音频播放终止,如音频文件较长,可使用 stopAudio 终止播放。 函数:lockDevice 锁定设备 函数名称:锁定设备 函数功能:锁定设备并关闭屏幕。 支持版本:引擎版本 iOS v1.0,Android v2.0.3以上 函数方法 lockDevice(); 返回值:无

脚本实例: 结束并锁定设备

lockDevice(); lua_exit();

注意事项:

无人值守的情况下,使用该函数可减少电池消耗。 函数:deviceIsLock 设备锁定状态 函数名称:设备锁定状态 函数功能:判断当前设备的屏幕锁定状态。 支持版本:引擎版本 iOS v1.0,Android v2.0.2以上 函数方法 flag = deviceIsLock(); 返回值 类型 说明 flag number 0 - 表示设备未锁定;非0 - 表示设备已锁定

脚本实例: 判断设备是否锁定

flag = deviceIsLock(); --如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可if flag == 0 then dialog("未锁定",3);else unlockDevice(); --解锁屏幕end

注意事项:

unlockDevice 函数功能是解除当前设备屏幕锁定状态,具体使用方法参照对应章节。 以上实例配合定时启动脚本效果显著,需要注意的是,由于此函数无法在设备启动过程中正确判断,如果使用开机自启动功能时请勿直接复制此段代码,如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可。 安卓模拟器上此函数可能显示异常。 函数:unlockDevice 解锁设备 函数名称:解锁设备 函数功能:解除屏幕锁定状态。 支持版本:引擎版本 iOS v1.0,Android v2.0.3以上 安卓函数方法 unlockDevice(); iOS函数方法 unlockDevice(password); 参数 类型 说明 password string 解锁密码,支持4位数字密码,多位数字密码和混合密码,仅支持 iOS v2.4.4 及以上版本

脚本实例: 解锁设备

flag = deviceIsLock(); --判断屏幕是否锁定if flag == 0 then dialog("未锁定",3);else unlockDevice(); --解锁屏幕end--开机自启动请勿使用此段代码,直接使用 unlockDevice 函数即可

注意事项:

如您的设备设备了锁屏密码,则此函数仅能唤醒屏幕。 以上实例配合定时启动脚本效果显著,需要注意的是,由于此函数无法在设备启动过程中正确判断,如果使用开机自启动功能时请勿直接复制此段代码,如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可。 此函数仅支持 iOS7 以上系统。 iOS 10 及以上系统设备激活屏幕后需要按一下home键可解锁。 密码解锁功能仅支持iOS版触动 v2.4.4 及以上版本 函数:setAutoLockTime 设置锁屏时间 函数名称:设置锁屏时间 函数功能:设置自动锁屏时间 支持版本:引擎版本 iOS v1.0,Android v2.2.1以上 函数方法: setAutoLockTime(tim) 参数 类型 说明 tim number iOS 系统:0到5,0是代表永不锁屏,1~5位锁屏时间,单位为分;安卓系统:单位为毫秒,设置为参数的最小近似值,具体情况根据手机不同结果不同。

脚本实例: 安卓设置锁屏时间

-- 设置无操作一分钟后锁屏setAutoLockTime(60*1000)-- 例如-- A手机系统选项是 1分钟 2分钟 10分钟 30分钟-- B手机系统选项是 1分钟 2分钟 3分钟 5分钟 10分钟 30分钟-- 那么如果设置90*1000(1.5分钟), 则A,B手机都是1分钟后自动锁屏-- 如果设置240*1000(4分钟), 则A手机是2分钟后自动锁屏,B手机是3分钟后自动锁屏函数:resetIDLETimer 重置锁屏计时 函数名称:重置锁屏计时 函数功能:重置系统空闲时间,阻止自动锁屏,保持屏幕常亮。 支持版本:引擎版本 iOS v1.0,Android v2.3.2.7 以上 函数方法 resetIDLETimer(); 返回值:无

函数实例: 保持屏幕常亮

while true do mSleep(30 * 1000); --等待 30 秒 resetIDLETimer(); --重置锁屏计时end

注意事项:

该函数可能会减少屏幕、电池寿命,请谨慎使用。 while true do ... end为死循环代码,一般不建议这样使用。除非强行终止运行,否则该脚本不会自动停止。 函数:setScreenResolution 修改分辨率(仅支持 iOS) 函数名称:修改分辨率 函数功能:强制更改设备分辨率 支持版本:引擎版本 iOS v2.2.1 以上,帮你玩平台禁用此函数 函数方法 setScreenResolution(string size); 返回值:无 参数 类型 说明 size string "640x960" "750x1334" "640x1136" "1125x2001" "1242x2208" "768x1024" "1536x2048" "default"

脚本实例:

setScreenResolution("640x960") --将当前设备分辨率更改为 640*960,开发者平台禁用此函数mSleep(10000)setScreenResolution("default") --恢复当前设备默认分辨率

注意事项:

每次打开触动精灵客户端将会自动恢复当前设备的默认分辨率(可在更多中关闭此功能)。 开发者可合理利用此函数进行单设备多分辨率脚本适配开发,使用此函数修改分辨率后在实际应用中运行脚本可能会存在点击坐标偏差。 执行完此函数需要一些时间生效,如在脚本中使用,请在调用此函数后加入适当的延迟。 双击电源键可强制恢复默认分辨率(在脚本运行中或者录制过程中不可用)。 此函数仅支持 iOS8 以上设备 Retina 屏幕的设备(如:iPad2、iPad Mini)。 需要注意的是,如果您的设备是 iPhone6,在系统中将显示模式调整为放大,当前分辨率即为 640x1136,无需再次使用此函数调整分辨率为 640x1136。 不推荐将分辨率改为比本身设备默认更高的分辨率,可能会出现无法恢复默认分辨率的问题。 在iOS9以上版本中请勿使用此函数,会造成一些不可预料的结果。 如您的设备有锁屏密码,请勿使用此函数更改分辨率,会造成无法解锁设备的问题。 开发者平台禁用此函数。

警告

此函数不推荐写在脚本中给普通用户使用,推荐仅用于开发者进行多分辨率适配截图使用,如要在脚本中使用请用弹窗提醒用户,如因操作不当造成分辨率无法恢复、无法输入解锁密码等后果由用户自己承担。

函数:clearKeyChain 清除钥匙串(仅支持 iOS) 函数名称:清除钥匙串 函数功能:清除指定应用储存在系统钥匙串中的信息。 函数方法 clearKeyChain(string bid); 返回值:无 参数 类型 说明 bid string 需要清除的应用程序的 Bundle ID

脚本实例: 清除前台应用的钥匙串

clearKeyChain(frontAppBid());

注意事项:

钥匙串一经清除,不可恢复,请妥善保管您的隐私信息。

名词解析:

钥匙串,是iOS提供给应用程序,允许自动记住密码以及重要信息的安全存储数据库,钥匙串一旦清除,该应用中记住的密码等机密信息全部清空。 函数:saveImageToAlbum 图片存入相册 函数名称:图片存入相册 函数功能:将指定路径的图片文件写入系统相册。 支持版本:引擎版本 iOS v2.2.5,Android v2.0.5 以上 函数方法 saveImageToAlbum(path); 返回值:无 参数 类型 说明 path string 需要写入系统相册的图片路径,支持绝对路径

脚本实例:

saveImageToAlbum(userPath().."/lua/1.png");saveImageToAlbum("2.png");

注意事项:

图片的格式支持 bmp, jpg, png。 如不填写绝对路径时,将默认为文件系统 res 目录下的文件。 当脚本要上传到帮你玩、企业版和小精灵平台时,请使用 userPath 函数自动获取路径。 函数:saveVideoToAlbum 视频存入相册 函数名称:视频存入相册 函数功能:将指定路径的视频文件写入系统相册 支持版本:iOS v2.3.9 - 16 ,Android v2.2.3.7 以上 函数方法 saveVideoToAlbum(path); 返回值:无 参数 类型 说明 path string 需要写入系统相册的视频路径,支持绝对路径

脚本实例:

saveVideoToAlbum(userPath().."/lua/1.mp4");saveVideoToAlbum("2.mp4");

注意事项:

视频的格式支持 mp4, avi, mov。 如不填写绝对路径时,将默认为文件系统 res 目录下的文件。 当脚本要上传到帮你玩、企业版和小精灵平台时,请使用 userPath 函数自动获取路径。 如此函数不生效,可以尝试使用下面的方法写入视频 命令: 安卓视频存入相册 安卓系统设备可以使用命令将视频存入相册 更详细的说明请看→这里

示例1

path = userPath().."/res/1.mp4"os.execute("am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file://"..path) 函数:writePasteboard、readPasteboard 读写剪贴板 函数名称:读写剪贴板 函数功能:对系统剪贴板进行读写操作。 函数方法 writePasteboard(string string, number type); 返回值 无 string = readPasteboard(); 返回值 string string 返回值、参数 类型 说明 string string 写入或读出的剪贴板字符串 type number 当 type 为 1 时,string参数为一个图片路径(仅支持引擎版本 iOS v2.3.6以上)

脚本实例: 从剪贴板中写出到编辑框

string = readPasteboard(); --读出剪贴板内容mSleep(500); --延迟 0.5 秒inputText(string); --写出字符串

从文件中读入一行并储存到剪贴板

file = io.open(userPath().."/res/test.txt" ,"r"); --以只读方式打开文件if file then --如果打开成功 writePasteboard(file:read()); --储存到剪贴板else toast("Cannot open: test.txt",0);endfile:close(); --关闭文件

iOS 系统:粘贴图片

writePasteboard("1.png",1)keyDown("RightGUI")keyDown("v")keyUp("v")keyUp("RightGUI")

注意事项:

该函数将覆盖系统剪贴板,如有重要数据储存在剪贴板请及时备份。 参数 type 仅支持引擎版本 iOS v2.3.6 以上。 当脚本要上传到帮你玩、企业版和小精灵平台时,请使用 userPath 函数自动获取路径。 函数:connectToWifi 连接 WiFi 函数名称:连接 WiFi 函数功能:自动连接指定 WiFi(暂不支持 iOS10 及其以上系统) 支持版本:引擎版本 iOS v2.4.4、Android v2.4.2 及其以上 注意事项:Android 版本的 type 参数仅支持 0 - 3,参数写为 4 及其以上数字时默认为 0 - 无密码 函数方法 connectToWifi(wifiname,password,type); 返回值:无 参数 类型 说明 wifiname string 必填,WiFi 名称 password string 必填,WiFi 密码 type number 必填,WiFi 加密类型:0 - 无密码,1 - WEP,2 - WPA,3 - WPA2,4 - WPA 企业版,5 - WPA2 企业版,Android 仅支持 0 - 3

脚本实例:

connectToWifi("wifiname","password",1)回调函数函数:beforeUserExit 终止之前运行 函数名称:终止之前运行 函数功能:在用户主动终止脚本运行之前执行 支持版本:引擎版本 iOS v2.2.1,Android v1.1.9 以上 函数方法 beforeUserExit(); 返回值:无

脚本实例: 以下实例,当用户在脚本运行过程中按音量键停止脚本,将会触发 beforeUserExit 函数并执行函数体内的语句

function beforeUserExit() dialog("OK",0)endfor var = 1,30 do mSleep(1000) toast(var)end

注意事项:

函数名必须为 beforeUserExit 才能够被识别,请勿在函数体中使用死循环,否则会造成脚本无法终止或其他不可预料的问题。 此函数可以被 lua_exit()、音量键停止、远程接口停止 触发。 iOS 设备上此函数必须在获取触动精灵授权后方可生效。 文字识别函数:ocrText 本地光学字符识别 函数名称:本地光学字符识别 函数功能:将指定区域的图像转换为其显示出的文字。 函数方法 text = ocrText(x1, y1, x2, y2, language, list, flag); 返回值:text/array 参数 类型 说明 x1, y1 number 欲识别的区域左上角顶点屏幕坐标 x2, y2 number 欲识别的区域右下角顶点屏幕坐标 language number 语言选择: 0 - 英文/数字; 1 - 中文 (特殊参数请看注意事项) list string 识别白名单,设置此参数后,不在白名单中的字符将被忽略 flag boolean 选填,不填或者 flag=false 识别结果,flag=true 返回坐标,支持引擎 iOS 3.0.0-126 及 Android 以上版本 返回值 类型 说明 text string 识别结果 array table 坐标

返回值为 string 脚本实例:

-- 引擎版本 Android v1.3.0 之前的版本 language 参数 10 或 20 是英文识别, 非 10 或 20 是中文识别; -- Android v2.0 以上版本仅支持 0,1 2个参数,0 = 英文/数字,1 = 中文。-- OCR 英文识别,注意本函数仅对标准字体识别尚可,非标准字体请自行制作字库配合触动点阵识别函数效果更佳 recognize = ocrText(20, 120, 200, 140, 0);mSleep(1000); dialog("识别出的字符:"..recognize, 0);whitelist = "0123456789-"a = ocrText(92, 1390, 472, 1464, 10, whitelist, 1)dialog(a)

返回 table 坐标脚本实例:

-- 创建一个全分辨率通用的浮动框 用来测试 ocrTextfwShowWnd("wid",0,0,300,300,1)fwShowTextView("wid","textid","abcd1234","center","ffffff","000000",20,0,0,0,300,300,1)mSleep(1000)-- 识别区域x,y,x1,y1 = 0, 100, 300, 300table = ocrText(x,y,x1,y1, 0,true)-- 识别结果text = "识别字符:"..table.text.."\ninfo长度:" .. #table.infofor var= 1, #table.info do text = text .. "\ninfo[" .. var .. "] x:" ..table.info[var].x+x .. " y:"..table.info[var].y+y .. " w:"..table.info[var].w+table.info[var].x+x .. " h:"..table.info[var].h+table.info[var].y+y .. " c:"..table.info[var].c .. " char:"..table.info[var].charenddialog(text)

返回 table 坐标:

-- text 表示识别的字符串;-- info 包含一个每个识别符号的信息;-- x 代表相对识别完整图片的位置的左上角 x 坐标;-- y 代表相对识别完整图片的位置的左上角 y 坐标;-- w 代表识别符号的宽度;-- h 代表识别符号的高度;-- c 代表相似度;{ text = "ocr文字" info = { { x = 0, y= 1, w=5, h=10, c = "90.01", char="字符" } …. }}

注意事项:

引擎版本 Android v1.3.0 之前的版本 language 参数为 10 或 20 时是英文识别,非 10 或 20 是中文识别 如果英文普通识别不了,可以尝试如下参数(不推荐使用): 0 - 普通识别 灰度二值化 10 - 普通识别 适用于部分存在干扰线背景的文字识别 20 - 适用于部分存在干扰线且深色背景的文字识别 21 - 适用于部分深色背景的文字识别 Android v2.0 以上版本仅支持 0 和1 两个参数,0 = 英文/数字,1 = 中文。 引擎版本 iOS v2.2.7-3,Android v1.3.0 以上中已集成英文字库,直接调用即可。 白名单参数需引擎版本 iOS v2.2.7-3,Android v1.3.0 以上支持。 OCR 中文识别库下载地址:chi_sim.traineddata OCR 英文数字识别库下载地址:eng.traineddata 如需使用中文字库,iOS 系统请将中文字库文件移至手机目录 /Applications/TouchSprite.app/tessdata,同时支持在 res 目录下 tessdata目录中放置字库文件,但程序会先搜索 /Applications/TouchSprite.app/tessdata中的文件,再到 res 目录下搜索,Android 系统移至/sdcard/TouchSprite/res/tessdata 方可正常使用。 该函数对非正规字体及有干扰的情况下识别效果不佳,推荐用来识别背景色相对单一的英文及数字。 函数:addTSOcrDict、addTSOcrDictEx、tsOcrText、tsFindText 触动点阵识别 函数名称:触动点阵识别 函数功能:加载自定义的触动精灵点阵字库工具生成的点阵字库识别屏幕上的文字。 支持版本:引擎版本 iOS v2.3.9,Android v2.2.1 以上 函数方法 index = addTSOcrDict(dict); index = addTSOcrDictEx(dict); 返回值:index ret = tsOcrText(index, x1, y1, x2, y2, "c0,c1",alpha) 返回值:string ret x, y = tsFindText(index, str, x1 , y1 , x2 , y2 , "c0,c1" , alpha ) 返回值:number x y 参数 类型 说明 dict string 字库名,如:dict.txt 由触动精灵点阵字库工具生成,需放置于触动精灵 res 目录 index number 字库标识,由 addTSOcrDict 函数返回值生成 x1, y1 number 欲识别的区域左上角顶点屏幕坐标 x2, y2 number 欲识别的区域右下角顶点屏幕坐标 c0, c1 string 偏色范围,由触动精灵点阵字库工具中获取,需要与制作字库时所设值保持一致,多组偏色用#分割 alpha number 精确度,范围 0 - 100 str string 想要查找的字符串 返回值 类型 说明 index number 字库标识,由 addTSOcrDict 函数返回值生成,tsOcrText 第一个参数需要用到此值 ret string 返回的识别结果 x, y number 找到的字符串坐标(字符串左上角点),如未找到则返回 -1,-1

脚本实例: 1. 识别屏幕指定区域内的文字

--相同字库只需要加载一次,重复加载会导致内存溢出index = addTSOcrDict("dict.txt")ret = tsOcrText(index,962,19,1068,54,"FFFFFF,000000",90)toast(ret) 在屏幕上查找指定文字的坐标 --相同字库只需要加载一次,重复加载会导致内存溢出index = addTSOcrDict("dict.txt")--在屏幕上找"弓"字的坐标x, y = tsFindText(index,"弓",35, 226, 385, 264,"fffbff,737573#FFFFFF,000000",90) --两组偏色toast(x..","..y) 在屏幕上查找指定文字的坐标(table 格式) local tab = {"00ffffe03ffffff1fffffff3ffffffefffffffffffe03fdfff001f9e7e001f00fc003e01f800fc01f001f803e003e0078007c00f000f0000000c00000000001fff001fffffe1ffffffe7ffffffefffffffffffffffffff003ffffe003f78fc003e01f8007c03f000f807c001f00f8003e01f0007c03e000f007c003e007000380000006@00$比$547$34$31"}--加载文字点阵字库,相同字库只需要加载一次,重复加载会导致内存溢出local indext = addTSOcrDictEx(tab) local ret = tsOcrText(indext, 0, 0, 640, 1136, "D9762D , 050901", 90)

注意事项:

触动精灵字库工具下载地址和使用手册:https://www.zybuluo.com/miniknife/note/629179 本函数为打码点阵识别加强版,突破大漠工具最高识别 11 行像素的限制,更适合高分辨率的移动端脚本开发。 相同字库只需要加载一次,重复加载会导致内存溢出 函数:addDmOcrDict、dmOcrText、dmFindText 打码点阵识别 函数名称:打码点阵识别 函数功能:加载自定义的大漠工具生成的点阵字库识别屏幕上的文字。 支持版本:引擎版本 iOS v2.2.4,Android v1.2.8 以上 函数方法 index = addDmOcrDict(string dict); index = addDmOcrDictEx( dict); 返回值 : index ret = dmOcrText(index, x1, y1, x2, y2 , "c0,c1" ,alpha ) 返回值: ret x, y = dmFindText(index , str, x1, y1, x2, y2, "c0,c1", alpha ) 返回值: x y 参数 类型 说明 dict string 字库名,如:dict.txt 由大漠工具生成,需放置于触动精灵 res 目录 index number 字库标识,由 addDmOcrDict 函数返回值生成 x1, y1 number 欲识别的区域左上角顶点屏幕坐标 x2, y2 number 欲识别的区域右下角顶点屏幕坐标 c0, c1 string 偏色范围,由大漠工具中获取,需要与制作字库时所设值保持一致,多组偏色用#分割 alpha number 精确度,范围 0 - 100 str string 想要查找的字符串 返回值 类型 说明 index number 字库标识,由 addDmOcrDict 函数返回值生成,dmOcrText 第一个参数需要用到此值 ret string 返回的识别结果 x, y number 找到的字符串坐标(字符串左上角点),如未找到则返回 -1,-1

脚本实例:

--由于大漠工具的 11 行像素限制,对于较大文字识别效率不高,推荐使用触动字库工具配合触动文字识别函数使用效果更佳--相同字库只需要加载一次,重复加载会导致内存溢出index = addDmOcrDict("dict.txt")ret = dmOcrText(index,962,19,1068,54,"FFFFFF,000000",90)toast(ret)--相同字库只需要加载一次,重复加载会导致内存溢出index = addDmOcrDict("dict.txt")--在屏幕上找"弓"字的坐标x, y = dmFindText(index,"弓",35, 226, 385, 264,"fffbff,737573#FFFFFF,000000",90) --两组偏色toast(x..","..y)

注意事项:

该函数完全兼容大漠字库格式,字库由大漠工具生成,由于大漠工具的 11 行像素限制,对于较大文字识别效率不高; 字库文件必须放置于触动精灵的 res 目录,加载字库时无需填写绝对路径; 生成的字库文件格式必须为 UTF-8 格式,字库首尾不能包含空行、空格等; 使用 dmFindText 函数需引擎版本 iOS v2.2.4,Android v1.2.8 以上支持; 触动精灵 iOS V2.2.7-3 以上客户端方可使用 addDmOcrDictEx 函数加载 table 格式字库。 大漠工具下载地址:http://pan.baidu.com/s/1nvybZG9;偏色计算器下载地址:https://pan.baidu.com/s/17AXHso-nBNkBGcW-W0fpCg 密码:qi8o 大漠点阵字库制作使用教程:https://www.zybuluo.com/lisaisacat/note/324664#大漠点阵字库制作和应用 相同字库只需要加载一次,重复加载会导致内存溢出 触动相关函数:deviceIsAuth 获取触动精灵授权状态(仅支持 iOS) 函数名称:获取触动精灵授权状态 函数功能:检测当前设备使用的触动精灵客户端是否已经授权。 支持版本:帮你玩平台禁用此函数 函数方法 auth = deviceIsAuth(); 返回值:auth 返回值 类型 说明 auth number 0 - 当前设备未授权,有单次30分钟的运行限制;1 - 当前设备已授权,无任何限制

脚本实例:

auth = deviceIsAuth(); --帮你玩平台禁用此函数if auth ~= 0 then dialog("您的触动精灵客户端已授权",0)end

注意事项:

帮你玩开平台禁用此函数

函数:getRunningAccess 获取当前脚本运行权限(仅支持 Android) 函数名称:获取当前脚本运行权限 函数功能:获取当前脚本运行权限,防止相同设备号脚本同时运行。 支持版本:引擎版本 Android v2.1.6 以上 函数方法 ret = getRunningAccess(); 返回值:ret 返回值 类型 说明 ret number 0表示没有相同设备号设备在运行,1表示有其他相同设备号设备在运行,-1表示频繁请求,-2表示不是tsp脚本,-3表示获取权限失败。

脚本实例:

local t1 = os.time()function MyGetRunningAccess(...) t2 = os.time() -- 每五分钟判断一次 if t2 - t1 >= 5*60 then t1 = os.time() -- 如果返回值为1 则有相同设备号脚本在运行 停止当前脚本 if getRunningAccess() == 1 then lua_exit() end endendwhile (true) do MyGetRunningAccess()end

注意事项

5分钟内只允许判断一次,不要频繁调用影响效率 可以直接复制脚本示例代码使用。 函数:userPath 获取客户端文件路径 函数名称:获取客户端文件路径 函数功能:获取触动精灵、帮你玩脚本商城、企业版、小精灵客户端的用户路径。 函数方法 path = userPath(); 返回值:path 返回值 类型 说明 path string 获取触动精灵、帮你玩脚本商城、企业版、小精灵客户端的用户路径

脚本实例:

path = userPath();path = path.."/script/gameCFG.txt" --设置一个在帮你玩客户端中可保存的文件路径

注意事项:

由于在帮你玩脚本商城中每个用户都有独立目录,故提供此函数来获取当前用户的文件目录路径,如果你的脚本需要保存/读取一些信息,请先用此函数获取路径并保存在变量中。 触动精灵、帮你玩、小精灵的插件目录、日志目录、资源目录都将生成在此路径下,分别对应 plugin、log、res ,如需在脚本中使用以上目录,请在获取到的字符串后自行拼接。 帮你玩脚本商城脚本目录为 /script,其他客户端的脚本目录为 /lua. 函数:whoAmI 检测触动产品类型 函数名称:检测触动产品类型 函数功能:用于判断当前运行的触动产品类型。 支持版本:iOS 引擎版本 v2.3.2,Android v2.0.3 以上 函数方法 ret = whoAmI(); 返回值:ret 返回值 类型 说明 ret number 0 - 触动精灵;1 - 帮你玩;2 - 企业版;3 - 小精灵 函数:showFloatButton 显示、隐藏悬浮条 函数名称:显示、隐藏悬浮条 函数功能:控制浮动按钮显示或者隐藏。 支持版本:iOS 引擎版本 v2.2.7,Android v1.3.0 以上(暂不支持企业版) 函数方法 showFloatButton(flag); 返回值:无 参数 类型 说明 flag boolean true - 显示悬浮按钮,false - 隐藏悬浮按钮 命令: 强制重启触动服务

以下方法可以强制重启触动服务,不推荐频繁调用。

--重启触动服务function reservice()--帮你玩平台禁用此函数 os.exit();endThread 协程

本类下所有函数都需要引擎版本 iOS v2.3.9,Android v2.3.4 以上支持。

函数:thread.create 创建协程 函数名称:创建协程 函数功能:创建一个协程 支持版本:iOS v2.3.9,Android v2.3.4 以上 函数方法 tid = thread.create(task,back) 返回值:tid 参数 类型 说明 task funtion 将该函数加入队列 back table 选填,错误回调,当执行任务时发生错误异常,则会回调这个函数并不再抛出 返回值 类型 说明 tid number 协程id,id 可用于结束或是等待一个任务

函数实例:

local thread = require('thread')--处理协程的错误local thread_id = thread.create(function() mSleep(1000) --故意制造的错误 --a() --抛出异常 thread.throw("协程抛出异常") return 100end,{ callBack = function() --协程结束会调用,不论是错误、异常、正常结束 dialog("协程结束了", 0) end, errorBack = function(err) --协程错误结束,一般是引用空调用,err是字符串 dialog("协程错误了:"..err,0) end, catchBack = function(exp) --协程异常结束,异常是脚本调用了throw激发的,exp是table,exp.message是异常原因 local ts = require('ts') local cjson = ts.json dialog("协程异常了\n"..cjson.encode(exp),0) end})thread.waitAllThreadExit()--等待所有协程结束,只能用于主线程函数:thread.createSubThread 创建子协程 函数名称:创建子协程 函数功能:在协程中创建一个子协程,关闭协程可自动把里面的子协程全关闭 支持版本:iOS v2.3.9,Android v2.3.4 以上 函数方法 函数方法 tid = thread.createSubThread(task,back) 返回值: tid 参数 类型 说明 task funtion 将该函数加入队列 back table 选填,错误回调,当执行任务时发生错误异常,则会回调这个函数并不再抛出 返回值 类型 说明 tid number 协程id,id 可用于结束或是等待一个任务

函数实例:

--子协程会在协程停止后,自动停止local thread = require('thread')local thread_id = thread.create(function() --创建子协程 local sub_thread_id_1 = thread.createSubThread(function() mSleep(3000) --因为sub thread 1比parent thread运行时间短,所以以下代码会被执行 toast("sub thread 1 over",3) end) local sub_thread_id_2 = thread.createSubThread(function() --创建子协程的子协程 local sub_thread_2_sub_thread_1 = thread.createSubThread(function() mSleep(1000) toast("sub thread 2,sub thread 1 over",3) end) mSleep(6000) --因为sub thread 2比parent thread运行时间长,所以以下代码实际执行不到 toast("sub thread 2 over",3) end) mSleep(4000) toast("parent thread over",3)end)thread.waitAllThreadExit()--等待所有协程结束,只能用于主线程函数:thread.stop 停止协程队列 函数名称:停止协程队列 函数功能:停止一个协程队列,如果协程中有子协程,一并结束 支持版本:iOS v2.3.9,Android v2.3.4 以上 函数用法: thread.stop(tid) 返回值:无 参数 类型 说明 tid number 协程id,id 可用于结束或是等待一个任务

函数用例:

local thread = require('thread')local thread_id1 = thread.create(function() for i=1,10 do toast("协程1:".. i) mSleep(1200) endend)local thread_id2 = thread.create(function() for i=1,10 do toast("协程2:".. i) mSleep(2000) endend)mSleep(5000)thread.stop(thread_id1)--关闭协程1thread.waitAllThreadExit()--等待所有协程结束,只能用于主线程函数:thread.wait 阻塞等待当前协程完成 函数名称:阻塞等待当前协程完成 函数功能:阻塞并等待当前协程完成 支持版本:iOS v2.3.9,Android v2.3.4 以上 函数用法 ok,ret = thread.wait(tid) 返回值:逻辑型 ok,表格型 ret 参数 类型 说明 tid number 协程ID back table 选填,错误回调,当执行任务时发生错误异常,则会回调这个函数并不再抛出 返回值 类型 说明 ok boolean 成功返回true,失败返回false ret table 正确无返回,错误返回错误信息

函数用例:

local thread = require('thread')local thread_id = thread.create(function() mSleep(1000) return 100end)local ok,ret = thread.wait(thread_id)if ok then --正常结束,ret是协程函数的返回值,这里ret=100 toast("wait ok,ret is "..ret)else --这里不会被执行 local ts = require('ts') local cjson = ts.json toast("wait thread fail:"..cjson.encode(ret))end函数:thread.setTimeout 设置协程超时时间 函数名称:设置协程超时时间 函数功能:设置协程超时时间,结束协程 支持版本:iOS v2.3.9,Android v2.3.4 以上 函数用法 thread.setTimeout(timeout,thread_id) 返回值:无 参数 类型 说明 timeout number 超时时间 thread_id number 协程ID,如果在协程内,参数省略 函数:thread.clearTimeout 清除协程超时时间 函数名称:清除协程超时时间 函数功能:清除协程超时时间 支持版本:iOS v2.3.9,Android v2.3.4 以上 函数用法 thread.clearTimeout(thread_id) 返回值:无 参数 类型 说明 thread_id number 协程 ID,如果在协程内,参数省略

函数用例:

thread = require("thread")local thread_id = thread.create(function() thread.setTimeout(2000) mSleep(1000) toast("thread step 1") mSleep(2000) toast("thread step 2") mSleep(3000) --设置有超时,执行不到这了,会调用catchBack toast("thread over")end,{ callBack = function() --协程结束会调用,不论是错误、异常、正常结束 -- toast("我结束了") end, catchBack = function(exp) --协程异常结束,异常是脚本调用了throw激发的,exp是table,exp.message是异常原因 local ts = require('ts') local cjson = ts.json toast("我异常了"..cjson.encode(exp)) end})mSleep(1000)thread.clearTimeout(thread_id)mSleep(2000)thread.setTimeout(1000,thread_id)--等待所有协程结束thread.waitAllThreadExit()函数:thread.waitAllThreadExit 协程阻塞等待 函数名称:协程阻塞等待 函数功能:阻塞等待所有协程结束,只能在主线程中使用 支持版本:iOS v2.3.9,Android v2.3.4 以上 函数方法 thread.waitAllThreadExit()

注意事项:

因为主线程结束了协程会全部结束,所以使用该函数可以等待协程都结束再退出

浮动窗口

函数功能:创建一个可控制浮动窗口并显示动态内容。 支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数:fwShowWnd 显示浮动窗口 函数功能:显示浮动窗口载体,用于加载视图。 支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上 函数方法 fwShowWnd(wid, x1,y1,x2,y2,type); 返回值:无 参数 类型 说明 wid string 用于指定创建窗口的ID x1,y1 number 窗口左上角顶点坐标 x2,y2 number 窗口右下角顶点坐标 type number 1 - 窗口可移动;0 - 窗口不可移动

脚本实例:

fwShowWnd("wid",0,0,200,200,1) --显示一个可移动的窗口并指定窗口ID为 wid

注意事项:

1.可同时创建多个浮动窗口。 2.此为浮动窗口初始化函数,创建浮动窗口必须调用此函数

函数:fwShowTextView 显示文字视图 函数功能:显示自定义的文字内容。 支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上 函数方法 fwShowTextView(wid, vid, text, align, textcolor, backgroundcolor, size, type,x1,y1, x2,y2, alpha); 返回值:无 参数 类型 说明 wid string 用于指定窗口载体的ID vid string 用于指定一个文字视图ID text string 需要显示的文字内容 align string 对齐方式,left - 左对齐;right - 右对齐;cente - 居中 textcolor string 文字颜色16进制值,填空字符串默认为黑色 backgroundcolor string 视图背景色16进制值,填空字符串默认为透明 size number 文字大小,填 0 默认值为15 type number 文字类型,0-标准;1-粗体 x1,y1 number 窗口左上角顶点坐标 x2,y2 number 窗口右下角顶点坐标 alpha number 选填参数,背景色透明度 0 - 1,默认为1

脚本实例:

fwShowWnd("wid",0,0,200,100,1)fwShowTextView("wid","textid","这是一个文本视图","center","FF0000","FFDAB9",20,0,0,0,200,100,0.5)--显示一个文字视图mSleep(500)

注意事项:

如需要刷新文本内容,重新调用函数即可。 视图坐标相对于窗口顶点 (0,0)。 透明度只针对背景颜色,文字不受影响。 函数:fwShowImageView 显示图形视图 函数功能:显示图片,用以填充选定范围。 支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上 函数方法 fwShowImageView(wid, vid, picpath, x1,y1, x2,y2, alpha); 返回值:无 参数 类型 说明 wid string 用于指定窗口载体的ID vid string 用于指定一个图形视图ID picpath string 需要显示的图片的路径,支持绝对路径、网络地址 x1,y1 number 窗口左上角顶点坐标 x2,y2 number 窗口右下角顶点坐标 alpha number 选填参数,透明度 0 - 1,默认为1

脚本实例:

fwShowWnd("wid",0,0,200,100,1)snapshot("1.png",400,400,600,500)fwShowImageView("wid","picid","1.png",0,100,200,200) --显示一个图片视图mSleep(500)

注意事项:

如需要刷新图形,重新调用函数即可。 视图坐标相对于窗口顶点 (0,0)。 函数:fwCloseView 关闭视图 函数功能:关闭已经创建的视图。 支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上 函数方法 fwCloseView(string wid, string vid); 返回值:无 参数 类型 说明 wid string 需要关闭的窗口载体的ID vid string 需要关闭的视图ID

脚本实例:

fwCloseView("wid","textid") --关闭文字视图

注意事项:

如需要关闭所有视图,直接使用 fwCloseWnd 函数关闭窗口即可。 函数:fwCloseWnd 关闭窗口 函数功能:关闭已经创建的窗口载体。 支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上 函数方法 fwCloseWnd(string wid); 返回值:无 参数 类型 说明 wid string 需要关闭的窗口载体的ID

脚本实例:

fwCloseWnd("wid") --关闭窗口

注意事项:

当使用此函数关闭窗口时,所有此窗口内的视图会同时关闭。 函数:fwGetWndPos 获取窗口位置 函数功能:获取已创建窗口的位置。 支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上 函数方法 wndTab = fwGetWndPos(string wid); 返回值:wndTab 参数 类型 说明 wid string 需要关闭的窗口载体的ID 返回值 类型 说明 wndTab.ret number 0 - 失败;1 - 成功 wndTab.x,wndTab.y number 窗口左上角定点坐标 wndTab.x1,wndTab.y1 number 窗口右下角定点坐标

脚本实例:

wndTab = fwGetWndPos("wid")dialog("窗口获取状态:"..wndTab.ret.."\n".."左上角坐标:"..wndTab.x..","..wndTab.y.."\n".."右下角坐标:"..wndTab.x1..","..wndTab.y1, 2)

注意事项:

如果该窗口不存在,会返回 0。 函数:fwShowButton 显示一个按钮 函数功能:定义并显示一个按钮,用于创建点击事件。 支持版本:引擎版本 iOS v2.3.7,Android v2.1.1 以上 函数方法 fwShowButton(wid, vid, text, textcolor, bgcolor, image, size, x1, y1, x2,y2); 返回值:无 参数 类型 说明 wid string 用于指定窗口载体的ID vid string 用于指定一个按钮ID text string 需要显示的文字内容 textcolor string 文字颜色16进制值,填空字符串默认为黑色 bgcolor string 视图背景色16进制值,填空字符串默认为透明 image string 需要显示的图片路径,支持绝对路径 size number 文字大小,填 0 默认值为13 x1,y1 number 窗口左上角顶点坐标 x2,y2 number 窗口右下角顶点坐标 函数:fwGetPressedButton 获取按钮点击事件 函数功能:用于获取点击按钮事件。 支持版本:引擎版本 iOS v2.3.7,Android v2.1.1 以上 函数方法 vid = fwGetPressedButton(); 返回值:点击则返回显示按钮的ID 返回值 类型 说明 vid string 返回显示按钮的ID

脚本实例:

local num = 0fwShowWnd("wid",100,100,500,500,1)fwShowTextView("wid","id1","点击:" .. num,"center","FF0000","FFDAB9",15,0,0,0,200,100)fwShowTextView("wid","id2","闪","center","FFFFFF","0000FF",15,0,300,0,400,100)fwShowWnd("wida",300,300,500,500,1)fwShowButton("wida","vid","点我","FFFFFF","FF0000","",15,0,0,100,100)while (true) do local vid = fwGetPressedButton() if vid == "vid" then num = num + 1 fwShowTextView("wid","id1","点击:" .. num,"center","FF0000","FFDAB9",15,0,0,0,200,100) if num%2 == 0 then fwShowTextView("wid","id2","闪","center","FFFFFF","0000FF",15,0,300,0,400,100) else fwCloseView("wid","id2") end endend

注意事项:

不能拖动按钮控件,只能拖动非按钮控件或主控件 完整实例init(0)toast("创建一个可移动的窗口")fwShowWnd("wid",0,0,200,200,1) --创建一个可移动的窗口mSleep(2000)toast("加载文字")fwShowTextView("wid","id1","这是一个文本视图","center","FF0000","FFDAB9",15,0,0,0,200,100,0.5)mSleep(2000)toast("加载一个截图")snapshot("1.png",400,400,600,500)fwShowImageView("wid","id2","1.png",0,100,200,200)mSleep(2000)toast("随便移动窗口,5 秒后继续")mSleep(5000)tab=fwGetWndPos("wid")dialog("窗口获取状态:"..tab.ret.."\n".."左上角坐标:"..tab.x..","..tab.y.."\n".."右下角坐标:"..tab.x1..","..tab.y1, 2)mSleep(2000)toast("关闭文字视图")fwCloseView("wid","id1") --关闭文字视图mSleep(2000)toast("关闭窗口")fwCloseWnd("wid")脚本 UI

简介:

UI即User Interface,在触动上指界面的样式,通过各种控件和样式组合,可以实现设置页面,信息展示等等丰富的功能。触动精灵提供三种方式供开发者方便、快捷的编写UI: showUI显示一个json自定义界面 WebView(网络视图)加载显示网页 使用TSLib扩展库中的便捷UI函数 showUI 函数名称:配置界面,脚本 UI 函数功能:显示一个自定义的界面,用来接收用户相关的自定义配置。 函数方法 ret, input_1, input_2, ... = showUI(string); 返回值:number ret, string input_(*) 参数 类型 说明 ui_json string 自定义界面json格式字符串调用时字符串需经过压缩与转义 返回值 类型 说明 ret number 1 - 确认输入;0 - 取消输入 input_(*) string 返回用户输入的多项数据 什么是 json

json 就是一串字符串,在该函数中,我们用它来创建界面上的一系列会使用特定的符号标注的元素: {} 双括号表示对象 [] 中括号表示数组 "" 双引号内是属性或值 : 冒号表示后者是前者的值 所以 {"name": "Michael"} 可以理解为是一个包含 name 为 Michael 的对象,而 [{"name": "Michael"},{"name": "Jerry"}] 就表示包含两个对象的数组。 当然了,你也可以使用 {"name":["Michael","Jerry"]} 来简化上面一部分,这是一个拥有 name 数组的对象。 不管是键或string的值都要用双引号引起来,所以上面的代码就是 {"name":"json"}。

调用示例

为了便于 json 的书写,我们通常使用可读性较强的形式;但是为了便于脚本的调用,我们 需要将 json 进行压缩与转义。将上文中的 json 进行转义后,作为字符串放进 showUI 函数的参 数 ui_json 中,例如:

--[[ret, input_1, input_2, ... = showUI("");]]ret, input_1, input_2, input_3 = showUI("{\"style\":".."\"default\",\"views\":[{\"type\":\"Label\",\"text\":".."\"settings\",\"size\":25,\"align\":\"center\",\"color\":".."\"0,0,255\"},{\"type\":\"RadioGroup\",\"list\":".."\"option1,option2,option3,option4,option5,option6,option7\",".."\"select\":\"1\"},{\"type\":\"Edit\",\"prompt\":\"Test\",".."\"text\":\"Custom Text\",\"size\":15,\"align\":\"left\",".."\"color\":\"255,0,0\"},{\"type\":\"CheckBoxGroup\",\"list\":".."\"option1,option2,option3,option4,option5,option6,option7\",".."\"select\":\"3@5\"}]}");

json 在线校验格式化、压缩转义工具:http://www.bejson.com/

上面的代码看起来有些乱,可能会让新手无所适从,我们换一种形式来写:

w,h = getScreenSize();--此段代码仅供演示用,不可复制粘贴直接运行MyJsonString = [[{ "style": "default", "width": ]]..w..[[, "height": ]]..h..[[, "config": "save_111.dat", "timer": 10, "views": [ { "type": "Label", "text": "设置", "size": 25, "align": "center", "color": "0,0,255" }, { "type": "RadioGroup", "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7", "select": "1" }, { "type": "Edit", "prompt": "测试三下", "text": "默认值", "size": 15, "align": "left", "color": "255,0,0" }, { "type": "CheckBoxGroup", "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7", "select": "3@5" } ]}]]ret, input1, input2, input3 = showUI(MyJsonString);

在上面的例子中可以看到"width"和"height"的值我们使用了变量 w,h 这两个变量具体数值由 getScreenSize() 函数提供,这样我们实现了UI界面自动适应屏幕大小,需要在UI中使用动态数据的时候我们还可以使用table的方式来进行构造,这样使用变量的时候可以更加顺手,例如:

local ts = require("ts")local cjson = ts.jsonlocal w,h = getScreenSize();MyTable = { ["style"] = "default", ["width"] = w, ["height"] = h, ["config"] = "save_001.dat", ["timer"] = 10, views = { { ["type"] = "Label", ["text"] = "设置", ["size"] = 25, ["align"] = "center", ["color"] = "0,0,255", }, { ["type"] = "RadioGroup", --单选框,input1 ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个单选项,序号从0开始,即选项1编号为0,选项2编号为1,依此类推 ["select"] = "1", --默认选择选项2 }, { ["type"] = "Edit", --输入框,input2 ["prompt"] = "请输入一个数字",--编辑框中无任何内容时显示的底色文本 ["text"] = "默认值", --界面载入时已经存在于编辑框中的文本 }, { ["type"] = "CheckBoxGroup", --多选框,input3 ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个多选项 ["select"] = "3@5", --默认选择选项3和选项5 }, { ["type"] = "ComboBox", --下拉框,input4 ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个下拉选项,序号从0开始,即选项1编号为0,选项2编号为1,依此类推 ["select"] = "1", --默认选择选项2 }, }}local MyJsonString = cjson.encode(MyTable);ret, input1, input2, input3, input4 = showUI(MyJsonString);--返回值ret, input1, input2, input3, input4 以上实例中将table转为JSON需要借助 ts 扩展库实现。 最下面返回值的数量应与代码中的非标签空间总数数量保持一致,否则会造成后面的非标签控件返回值无效。

更多用法可以参考这里:一个包含所有控件的UI实例

用 json 创建界面

上面是调用的例子,但是我们首先我们要设计一个界面,并生成一段json字符串,再进行压缩转义。 我们先看上图界面示例json原来的样子(非脚本代码,不可直接引用),再作解释:

{--此示例仅供演示作用,不可复制粘贴直接运行"style": "default", "config": "save_111.dat", "width": 400,"height": 120, "bg": "a.png", "timer": 10, "cancelname": "取消", "okname": "开始","views": [{"type": "Label","text": "设置","size": 25, "align": "center","color": "0,0,255"},{"type": "RadioGroup","list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7","select": "1"},{"type": "Edit","prompt": "测试三下","text": "默认值","size": 15, "align": "left","color": "255,0,0"},{"type": "CheckBoxGroup","list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7","select": "3@5"},{ "type": "ComboBox", "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7", "select": "1"},{"type": "Image","src": "http://www.baidu.com/img/bdlogo.png"}]}

创建一个界面,需要包含 style 与 views 两个主键。 style 表示界面样式,views 数组则包含了界面上的控件。

全局属性 参数 类型 说明 style 样式 string 指定界面样式default为默认样式,所有控件自动排列,每个控件占据一行。 custom为自定义样式,当界面样式被指定为这种,则必须指定每个控件的 rect 属性以调整控件的尺寸以及位置 width 宽度 number 界面的宽度(像素 pixels),不得低于 400 height 高度 number 界面的高度(像素 pixels),不得低于 120 bg 背景图片 string 指定界面的背景图片,相对路径为 res 资源目录,可填写绝对路径 okname 确认 string 指定底部右侧确认按钮上显示的文字 cancelname 取消 string 指定底部左侧取消按钮上显示的文字 title 标题 string 用于指定UI顶部标题栏文字仅 iOS v2.2.5,Android v1.2.4 以上版本支持 titles 多页标题 string 用于指定UI顶部标题栏文字在多页模式下可以设置多个标题对应多个页面,以逗号分隔仅 iOS v2.3.2,Android v2.2.7以上版本支持 pagetype 多页模式 number 当指定该属性值为 multi 时,UI可分页显示,左右滑动进行翻页,如不指定该属性,将使用默认的单页模式仅 iOS v2.2.5,Android v2.1.5以上版本支持 selpage 多页模式默认停留 number 多页模式下指定默认停留的页面仅引擎版本 iOS V2.2.7 及以上版本支持 orient 方向 number 指定 UI 界面显示方向0-Home键在设备下方1-Home键在设备右侧2-Home键在设备左侧仅 iOS v2.2.5以上版本支持 btnbkcolor 底部按钮背景色 string 使用 RGB 十进制数值,以英文半角逗号分割仅 iOS v2.3.5 以上版本支持 bgcolor 界面背景色 string 使用 RGB 十进制数值,以英文半角逗号分割仅 iOS v2.3.5 以上版本支持 pagenumtype 分页指示样式 string dot - 小圆点number - 数字default - 不显示仅 iOS v2.3.5 ,Android v1.3.0 以上版本支持 config 配置保存文件名 string 保存配置到该文件 timer 自动确认时间 number 倒计时完成自动开始 rettype 指定返回值类型 string default - 默认模式,保持旧版格式,可使用此属性兼容旧版UIarray - 数组模式,将所有控件返回值按添加顺序放入一个table中并返回table - table模式,将所有控件返回值以 key,values 形式的table返回,key为控件id属性所指定的值仅 iOS v2.2.6,Android v1.2.7 及以上版本支持

注意事项:

当在 iOS9 以上版本的 iPad 设备上使用 showUI 界面时,务必使用orient属性指定正确的屏幕方向,否则将可能出现确定、取消按钮无法点击的情况。 如果配置文件已存在,调用该界面会自动载入该文件中的配置,如果更新了UI代码后必须要删除旧的配置文件才会正常显示。 使用 timer 属性必须要设定 config 属性,第一次存储配置文件不存在时,此属性不生效,当配置文件存在时,此属性会在生成UI上进行倒计时。 在脚本UI界面点击闹钟标志则取消倒计时功能。 控件通用属性 参数 功能 类型 说明 width 控件宽度 number 选填,默认为 showUI 宽度,当 showUI 全局属性 style 为 default 时,如需将多个控件放入同一行显示,可用此属性调整控件宽度。仅 iOS v2.2.6,Android v1.2.4 及以上版本支持 nowrap 指定下一个控件是否换行 number 选填,当此属性为 1 时,将指定下一个控件不换行,用于将多个控件放入一行显示。不写控件宽度下个插件会在屏幕外显示。仅 iOS v2.2.6,Android v1.2.5 及以上版本支持 id 控件 ID string 选填,为控件指定 ID,可以理解为控件的名称,在返回类型为table时将作为返回 table 中的 key 界面控件

我们可以看到,界面控件被定义在 views 数组中。而自定义界面一共有七种控件类型 type:标签 Label,单选框 RadioGroup,单行文本框 Edit,多行文本框 TextArea,多选框 CheckBoxGroup,下拉框 ComboBox,图片 Image。

控件:Label 标签

一共有四种属性:标题 text、字体大小 size、对齐方式 align、字体颜色 color、控件ID id

参数 功能 类型 说明 size 字体大小 number 选填,如果不指定该属性,则默认值为 15 text 标题 string 必填,一般来用显示说明文字或者标题,该控件没有任何返回值,只用作显示 align 对齐方式 string 选填,默认左对齐。可取值为:左对齐 left,右对齐 right,居中 center color 字体颜色 string 选填,默认黑色。使用RGB十进制数值,以英文半角逗号分割

注意事项:

标签可支持多行显示,在字符串中插入 \n 可以进行换行,例如:\"测试\n测试 1\n测试 2\"(安卓系统 \n 需写成 \r\n) 文字颜色尽量选择和背景区别较大、在电子设备屏幕上看起来不刺眼的颜色,具体可参考配色网。

控件:RadioGroup 单选框

一共有五种属性:可选项标题 list、默认选中项编号 select、控件ID id、在可选项上显示图片 images、选项图片缩放 scale

参数 功能 类型 说明 list 可选项标题 string 必填,多个可选项之间用英文半角逗号分割 select 默认选中项编号 string 必填,只允许填写一个,序号从 0 开始,与可选项标题中的顺序保持一致 images 在可选项上显示图片 string 选填,此属性可单独使用也可以和 list 属性同时使用,多个图片资源用英文半角逗号分割 scale 选项图片缩放 number 当images属性有效时可用此属性设置图片资源缩放比例,范围 0 - 1 countperline 单行控件显示数量 number 选填,Android 默认 1 行显示 1 个,iOS 控件总宽度超过屏幕宽度则堆积在一起,引擎版本支持 iOS v3.00-157 及 Android v2.3.6 及其以上版本,仅支持 TSLib 函数库 v1.2.4 及其以上版本 控件:Edit 单行文本框

一共有六种属性:提示文本 prompt、默认内容 text、 字体大小 size、对齐方式 align、字体颜色 color、键盘类型 kbtype

参数 功能 类型 说明 prompt 提示文本 string 必填,控件类型,输入框 text 默认内容 string 选填,无,提示文字 size 字体大小 number 选填,如果不指定该属性,则默认值为 15 align 对齐方式 string 选填,默认左对齐。可取值:左对齐 left,右对齐 right,居中 center color 字体颜色 string 选填,默认黑色。使用 RGB 十进制数值,以英文半角逗号分割 kbtype 键盘类型 string 选填,设置获取焦点时弹出的键盘类型,number ascii 控件:TextArea 多行文本框

仅支持 iOS v2.4.5-3 以上版本及 Android v2.3.3.2 以上版本 一共有六种属性:提示文本 prompt、默认内容 text、 字体大小 size、对齐方式 align、字体颜色 color、高度 height、键盘类型 kbtype

参数 功能 类型 说明 prompt 提示文本 string 选填,无,提示文字(仅支持 Android) text 默认内容 string 选填,无,提示文字 size 字体大小 number 选填,如果不指定该属性,则默认值为 15 align 对齐方式 string 选填,默认左对齐。可取值:左对齐 left,右对齐 right,居中 center color 字体颜色 string 选填,默认黑色。使用 RGB 十进制数值,以英文半角逗号分割 height 高度 number 选填,支持 iOS v2.4.5-3 以上版本,Android 根据内容自行修改的 kbtype 键盘类型 string 选填,设置获取焦点时弹出的键盘类型,number ascii 控件:CheckBoxGroup 多选框

又称作检查框,一共有五种属性:可选项标题 list、默认选中项编号 select、控件ID id、在可选项上显示图片 images、选项图片缩放 scale

参数 功能 类型 说明 list 可选项标题 string 必填,多个可选项之间用英文半角逗号分割 select 默认选中项编号 string 必填,允许填写一个或多个,填写多个时以 @ 分割。序号从 0 开始,与可选项标题中的顺序保持一致 images 在可选项上显示图片 string 选填,此属性可单独使用也可以和list属性同时使用,多个图片资源用英文半角逗号分割 scale 选项图片缩放 string 当images属性有效时可用此属性设置图片资源缩放比例,范围 0 - 1 countperline 单行控件显示数量 number 选填,Android 默认 1 行显示 1 个,iOS 控件总宽度超过屏幕宽度则堆积在一起,引擎版本支持 iOS v3.00-157 及 Android v2.3.6 及其以上版本,仅支持 TSLib 函数库 v1.2.4 及其以上版本 控件:ComboBox 下拉框

一共有五种属性: 可选项标题 list、默认选中项编号 select、两个ComboBox控件建立数据关联时的下级选项 data、两个ComboBox控件建立数据关联时的上级数据源名称 source、两个ComboBox控件建立数据关联时的下级数据源名称 dataSource

参数 功能 类型 说明 list 可选项标题 string 必填,多个可选项之间用英文半角逗号分割 select 默认选中项编号 string 必填,只允许填写一个,序号从 0 开始,与可选项标题中的顺序保持一致 data 两个ComboBox控件建立数据关联时的下级选项 string 选填 source 两个ComboBox控件建立数据关联时的上级数据源名称 string 选填 dataSource 两个ComboBox控件建立数据关联时的下级数据源名称 string 选填

注意事项:

默认选中项编号 select 只允许填写一个,序号从 0 开始(此控件需引擎版本 iOS v2.1.3 以上支持)。 上一级的必须要有data数据给下级使用,而且list里面逗号分割的个数必须要和data里面#号分割的个数保持一致,上一级的source 和下一级的 dataSource 要保持一致 使用了dataSource 就不可以使用list(data、source、dataSource属性需引擎版本 iOS v2.1.8,Android v1.2.4 以上版本支持) 控件:Image 图片

放置一个图片到 UI 上,属性:插入图片的路径 src、对齐方式 align、缩放比例 scale、宽度 width

参数 功能 类型 说明 src 插入图片的路径 string 必填,可以是本地路径或者网络路径 align 对齐方式 string 选填,在 default 模式下设置 image 控件的对齐方式 left center right scale 缩放比例 number 选填,在 default 模式下设置 image 控件的缩放比例,范围 0 - 1 width 宽度 number 选填,在 default 模式下设置 image 控件的宽度

注意事项: 图片路径的可以是本地路径或者网络路径,例如:\"type\":\"Image\",\"src\":\"http://www.baidu.com/img/bdlogo.png\" 或者\"src\":\"1.png\"

默认样式

以上六种控件均可重复使用,这个界面的样式 style 为 default,即默认样式,这个样式下的控件将会自动排列,不需要指定其坐标。

指定控件尺寸与位置

另一种界面样式为 custom,当界面样式被指定为这种,则必须指定每个控件的 rect 属性以调整控件的尺寸以及位置,例如:

{"type": "Edit", "size": 15, "align": "left","prompt": "提示文字","text": "默认文字","color": "255,0,0","rect": "0,0,100,40"} 参数 类型 说明 尺寸与位置 rect 文本型 必填,该属性适用于全部五种控件,将控件的左上角顶点横坐标、纵坐标,控件宽度、高度分别以英文半角逗号分割。

注意事项:

在引擎版本 iOS v2.2.6 以上版本中,自定义模式坐标计算方式由原来的分辨率(pt)改为分辨率(px),开发者使用自定义模式时需要做对应修改,新的方式只需将原自定义模式坐标乘以 Render 屏对应的倍数即可

返回值

除了标签 Label,其余四种控件均存在文本型返回值,按照定义时的顺序依次返回给 input_1, input_2, input_3, ...。 单选框返回当前选中项的编号(从 0 开始); 编辑框返回其中的内容; 多选框返回当前选中项的编号(从 0 开始),多个选项以 @ 分割。如:3@5 表示多选框组编号为 3 和 5 的两个选项已被选中。 别忘记,该函数的第一个返回值为整数型 ret,用户单击右下角的“确认”时返回 1,单击左下角的“取消”时返回 0。 通过设置全局属性 rettype 可指定返回值类型适应不同的需求,具体用法参看全局属性介绍部分(此属性需引擎版本 iOS v2.2.6,Android v1.2.7 以上版本支持)。 如果关于返回值调用还是不明白,可以看一下视频教程。 当然你也可以看一下触动精灵官方提供的UI库,非常简洁方便。

自定义样式实例代码local ts = require("ts")local cjson = ts.jsonw,h = getScreenSize();MyTable = { ["style"] = "default", -- 选填,默认样式,控件排列类型 ["rettype"] = "table", -- 选填,旧版,shoui返回值格式 ["width"] = w, -- 选填,安卓默认全屏,iOS默认,showui宽度 ["height"] = h, -- 选填,安卓默认全屏,iOS默认,shoWui高度 ["config"] = "showuiTest.txt", -- 选填,无,配置文件保存文件 ["timer"] = 99, -- 选填,无,自动执行倒计时 ["orient"] = 0, -- 选填,竖屏,显示方向(仅支持iOS) ["pagetype"]= "multi", -- 选填,单页,单页/多页 (多页显示时必填,否则无法正确显示showui) ["title"] = "触动精灵脚本UI演示",-- 选填,脚本配置,showUI标题 ["titles"] = "第一页,第二页,第三页", -- 选填,无,多页howui标题(尽在多页下有效) ["cancelname"] = "取消", -- 选填,取消,左下角按钮名称 ["okname"] = "开始", -- 选填,确认,右下角按钮名称 ["selpage"] = 1, -- 选填, 无,多页模式下指定默认停留的页面 ["btnbkcolor"] = "255,255,255", -- 选填,255,255,255,底部按钮背景色(仅支持iOS) ["bgcolor"] = "255,255,255", -- 选填,255,255,255,界面背景色(仅支持iOS) ["pagenumtype"] = "number", -- 选填,无,分页指示样式 pages = { { { ["type"] = "Label", ["text"] = "点击右上角闹钟关闭倒计时↗", ["size"] = 20, ["align"] = "center", ["color"] = "255,0,0", }, { ["type"] = "Label", -- 必填,控件类型,标签 ["text"] = "第一页设置", -- 选填,无,显示内容(内容为空,仍然占用一行) ["size"] = 25, -- 选填,15,字号 ["align"] = "center", -- 选填,居左,对齐样式 ["color"] = "0,0,0", -- 选填 ,0,0,0,字体颜色 }, { ["type"] = "Label", ["align"] = "center", ["text"] = "单选框-RadioGroup", ["size"] = 20, }, { ["type"] = "RadioGroup", -- 必填,控件类型,单选框 ["id"] = "rg", -- 选填,无,控件ID,以table格式返回返回值时必填,否则无法获取返回值 ["list"] = "小学,初中,高中,大学", -- 必填,无,单选框内容 ["select"] = "1", -- 选填,0,默认选中项id ["images"] = "showui_test_a.png,showui_test_b.png,showui_test_c.png,showui_test_d.png", -- 选填,无, 单选框选项显示图片 ["scale"] = "0.4", -- 选填,1,图片缩放比例 }, { ["type"] = "Label", ["align"] = "center", ["text"] = "输入框-Edit", ["size"] = 20, }, { ["type"] = "Edit", -- 必填,控件类型,输入框 ["id"] = "edit", -- 选填,无,控件ID 以table格式返回返回值时必填,否则无法获取返回值 ["prompt"] = "年", -- 选填,无,提示文字 ["text"] = "1989", -- 选填,无,默认文字 ["kbtype"] = "number", -- 选填,标准键盘,键盘类型 ["color"] = "0,0,0", -- 选填,黑色,字体颜色 ["size"] = 15, -- 选填,15,字体大小 ["align"] = "center", -- 选填,居左,对齐方式 }, { ["type"] = "Label", ["align"] = "center", ["text"] = "单级下拉框-ComboBox", ["size"] = 20, }, { ["type"] = "ComboBox", -- 必填,控件类型,下拉框 ["id"] = "cb1", -- 选填,无,控件ID以table格式返回返回值时必填,否则无法获取返回值 ["list"] = "鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪", -- 必填,无,下拉框内容 ["select"] = "1", -- 选填,0,默认选中项id }, { ["type"] = "Label", ["text"] = "二级下拉框-ComboBox", ["size"] = 20, }, { ["type"] = "ComboBox", -- 必填,控件类型,下拉框 ["id"] = "cb2", -- 选填,无,控件ID 以table格式返回返回值时必填,否则无法获取返回值 ["list"] = "北京,上海,广州,深圳",-- 必填,无,下拉框内容 ["select"] = "0", -- 选填,0,默认选中项id ["data"] = "北京1,北京2,北京3,北京4#".. "上海1,上海2,上海3,上海4#".. "广州1,广州2,广州3,广州4#".. "深圳1,深圳2,深圳3,深圳4", --必填,无,下拉框子选项内容 ["source"] = "这里必须一致" -- 必填,无,主选项下拉框控件 source 属性必须与子选项下拉框的dataSource属性一致 }, { ["type"] = "ComboBox", -- 必填,控件类型,下拉框 ["id"] = "cb3", -- 选填,无控件 ID,以 table 格式返回返回值时必填,否则无法获取返回值 ["select"] = "0", -- 选填,无,子选项下拉框默认选中项 ["dataSource"] = "这里必须一致" --必填,无,主选项下拉框控件 source 属性必须与子选项下拉框的 dataSource 属性一致 }, },{ { ["type"] = "Label", ["text"] = "第二页设置", ["size"] = 25, ["align"] = "center", ["color"] = "0,0,0", }, { ["type"] = "Label", ["align"] = "center", ["text"] = "多行文本框-TextArea", ["size"] = 20, }, { ["type"] = "TextArea", -- 必填,控件类型,输入框 ["id"] = "ta", -- 选填,无,控件ID 以 table格式返回返回值时必填,否则无法获取返回值 ["text"] = "定制脚本担保人员:\r\n".. "2885869964\r\n".. "触动精灵脚本交易群\r\n".. "384123108\r\n".. "官方工作人员都是使用288开头的企业QQ\r\n".. "交易需谨慎,谨防上当受骗!", -- 选填,无,默认文字 ["prompt"] = "我是hint", -- 选填,无,提示文字 ["size"] = 15, -- 选填,15,字体大小 ["align"] = "center", -- 选填,居左,对齐方式 ["height"] = 250, -- 选填,75,空间高度(仅支持 iOS) ["color"] = "255,0,0", -- 选填,黑色,字体颜色 ["kbtype"] = "number", -- 选填,标准键盘,键盘类型 }, { ["type"] = "Label", ["align"] = "center", ["text"] = "多选框-CheckBoxGroup", ["size"] = 20, }, { ["type"] = "CheckBoxGroup", --必填,控件类型,单选框 ["id"] = "cbg", -- 选填,无,控件 ID 以 table 格式返回返回值时必填,否则无法获取返回值 ["list"] = "电影,读书,跑步,吃饭,".. "运动,睡觉,旅行,打豆豆,听歌,电影", -- 必填,无 ,单选框内容 ["select"] = "3@5@7", -- 选填,0,默认选中项 id ["images"] = "showui_test_a.png,showui_test_b.png,".. "showui_test_c.png,showui_test_d.png,showui_test_e.png,".. "showui_test_f.png,showui_test_g.png,showui_test_h.png,".. "showui_test_i.png,showui_test_j.png", -- 选填,无,单选框选项显示图片 ["scale"] = "0.3", -- 选填,1,图片缩放比例 }, },{ { ["type"] = "Label", ["text"] = "第三页设置", ["size"] = 25, ["align"] = "center", ["color"] = "0,0,0", }, { ["type"] = "Label", ["align"] = "center", ["text"] = "图片-Image", ["size"] = 20, }, { ["type"] = "Image", -- 必填,控件类型,图片 ["src"] = "http://mrw.so/4wbrDw", --必填,无,图片路径(可填写资源目录下相对路径,绝对路径,网址) ["scale"] = 0.4, -- 选填,无,图片缩放比例 }, { ["type"] = "Image", ["src"] = "http://mrw.so/4wbrDw", ["scale"] = 0.6, -- 选填,无,图片缩放比例 ["align"] = "left" -- 选填,居左,对齐方式 }, { ["type"] = "Image", ["src"] = "http://mrw.so/4wbrDw", ["scale"] = 0.8, -- 选填,无,图片缩放比例 ["align"] = "center" -- 选填,居左,对齐方式 }, { ["type"] = "Image", ["src"] = "http://mrw.so/4wbrDw", ["scale"] = 1, -- 选填,无,图片缩放比例 ["align"] = "right" -- 选填,居左,对齐方式 }, } } }local MyJsonString = cjson.encode(MyTable);UIret,values = showUI(MyJsonString)if UIret == 1 then local rg = values.rg local edit = values.edit local cb1 = values.cb1 local cb2 = values.cb2 local cb3 = values.cb3 local ta = values.ta local cbg = values.cbg dialog("单选:"..rg..",\r\n单行输入框:"..edit..",\r\n一级下拉框:"..cb1..",\r\n二级下拉框主选项:"..cb2..",\r\n二级下拉框子选项:"..cb3..",\r\n多行文本框:"..ta..",\r\n多选框:"..cbg..",")end 以上实例需引擎版本iOS v2.2.6,Android v1.2.7 以上版本支持。 实例中所使用的图片资源包下载地址:https://pan.baidu.com/s/1c4liZ88,将图片包中的图片文件解压后放入 /User/Media/TouchSprite/res 目录中,运行实例即可看到效果。 实例在 iPhone6S iOS9.0.2 上调试通过,如在其他设备上使用,需自行调整部分参数以适配不同的分辨率。

效果图

此处输入图片的描述文本框、单选框和下拉框此处输入图片的描述多行文本框和多选框此处输入图片的描述图片

名词解析

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本 格式,易于人阅读和编写,同时也易于机器解析和生成。 JSON 中冒号后的值可以是字符串、数字、也可以是另一个数组或对象。 转义即取消某些特定的、在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义,如三种引号 " ' ` 、美元符号 $ 等等。当我们在被引号“括起来”的文本中,想表示出一个引号,就需要转义,如:dialog("\"",5);

注意事项:

如果您的系统为 iOS 9 以上版本,并且设备是 iPad,由于一些特殊原因,锁定横屏的时候弹出的UI界面可能无法正常操作,如出现此问题,请将设备改为锁定竖屏。 需要注意的是,所有控件的属性值必须按照规则来赋值,错误的赋值类型会导致一些不可预料的结果。 为了方便开发者使用,触动精灵提供了封装好的便携 UI 供大家使用,说明文档:https://www.zybuluo.com/miniknife/note/293935 在部分安卓设备上需要在系统设置里开启悬浮窗权限方可正常使用 showUI webUI(暂不支持 iOS 7 系统)

本类下所有函数都需要引擎版本 iOS v2.3.9,Android v2.3.4 以上支持。

在使用此类函数前必须插入以下代码:

local webview = require('webview')函数: webview.new 创建 webview 函数名称:创建 webview 函数功能:创建一个 webview 支持版本:引擎版本 iOS v2.3.9,Android v2.3.4 以上 函数方法: local myweb1,err = webview.new(webview_name,{originx,originy,height,width,cornerRadius,orient,root,index,html}) 参数 类型 说明 webview_name string webview 的名字,可以通过不同的名字同时创建多个 webview originx number 左上角 x 点坐标缺省为 0 originy number 左上角 y 点坐标缺省为 0 height number 高度,缺省为全屏 width number 宽度,缺省为全屏 cornerRadius number 圆角,缺省为 0 orient number webview 方向,0-3,和 init 方向一致,缺省为 0 root string webview 在文件系统里个根路径,缺省 userPath().."/res" index string webview 的入口文件名,缺省 index.html,如果设置了 html, 这个参数就无效了 html string 主文件的 html 返回值 类型 说明 myweb1 table 创建webview成功返回一个table,失败返回false err string 创建webview失败,err返回错误信息

函数用例:见完整例子

函数: myweb1.show 显示webview 函数名称:显示 webview 函数功能:显示一个webview 支持版本:引擎版本 iOS v2.3.9,Android v2.3.4 以上 函数方法: myweb1.show() 返回值:无

函数用例:见完整例子 注意事项:

myweb1 为创建 webview 返回的 id

函数: myweb1.set 改变 webview 外观 函数名称:改变 webview 外观 函数功能:动态改变webview的外观 支持版本:引擎版本 iOS v2.3.9,Android v2.3.4以上 函数方法: myweb1.set({originx,originy,height,width,cornerRadius,orient}) 返回值:无 参数 类型 说明 webview_name string webview 的名字,可以通过不同的名字同时创建多个 webview originx number 左上角 x 点坐标缺省为 0 originy number 左上角 x 点坐标缺省为 0 height number 高度,缺省全屏 width number 宽度,缺省全屏 cornerRadius number 圆角,缺省为 0 orient number webview 方向,0-3,和 init 方向一致,缺省为 0

函数用例:见完整例子 注意事项:

myweb1 为创建 webview 返回的对象

函数: myweb1.close 关闭 webview 函数名称:关闭 webview 函数功能:关闭一个 webview 支持版本:引擎版本 iOS v2.3.9,Android v2.3.4以上 函数方法: myweb1.close() 返回值:无

函数用例:见完整例子 注意事项:

myweb1 为创建 webview 返回的对象

函数: event.register 发送消息,传递参数 函数名称:发送消息,传递参数 函数功能:发送 post 到/set_event 支持版本:引擎版本 iOS v2.3.9,Android v2.3.4以上 函数方法: event.register(event,func) 参数 类型 说明 event string 事件名称 func funtion 执行的命令

函数用例:见完整例子 注意事项:

myweb1 为创建 webview 返回的 id

完整示例

示例代码一

local html = [[DOCTYPE html> 数据提交简单示例 输入框-普通 输入框: 输入框-数字 输入框: 输入框-多行 输入框: asd 提交 取消 function actions(data) {//数据提交post请求 var xhr = new XMLHttpRequest(); xhr.open("POST", "/set_event", true); xhr.setRequestHeader("Content-type", "application/json"); xhr.onreadystatechange = function() { var XMLHttpReq = xhr; if (XMLHttpReq.readyState == 4) { if (XMLHttpReq.status == 200) { var text = XMLHttpReq.responseText; console.log(text); } else { console.log(XMLHttpReq.status) } } else { console.log(XMLHttpReq.readyState); } }; alert('{"name": "showUI_commit","value":' + data + '}') xhr.send('{"name": "showUI_commit","value":"' + data + '"}'); } function closed() {//取消post请求 var xhr = new XMLHttpRequest(); xhr.open("POST", "/set_event", true); xhr.setRequestHeader("Content-type", "application/json"); xhr.onreadystatechange = function() { var XMLHttpReq = xhr; if (XMLHttpReq.readyState == 4) { if (XMLHttpReq.status == 200) { var text = XMLHttpReq.responseText; console.log(text); } else { console.log(XMLHttpReq.status) } } else { console.log(XMLHttpReq.readyState); } }; xhr.send('{"name": "showUI_cancel"}'); } document.getElementById('actions').onclick = function() {//数据提交按钮点击 var com3Val = document.getElementsByName('com3')[0].value; //获取name为com3的值 var com4Val = document.getElementsByName('com4')[0].value; //获取name为com7的值 var com7Val = document.getElementsByName('com7')[0].value; //获取name为com3的值 var data = com3Val + "," + com4Val + "," + com7Val; actions(data); } document.getElementById('cancel').onclick = function() {//取消按钮点击 closed(); } ]]local thread = require('thread')local event = require('event')--创建webviewlocal showui_view,err = require('webview').new("myshowui", {html=html})assert(showui_view,err)event.register("showUI_commit",function(value) local ts = require('ts') local cjson = ts.json toast(cjson.encode(value),5) showui_view.close()end)event.register("showUI_cancel",function(value) showui_view.close()end)showui_view.show()thread.waitAllThreadExit()

示例代码二

local html = [[DOCTYPE html> Hello 触动精灵 ShowUI 返回 开始 (function($, doc) { var uiVersion=$.getVersion();//获取ui版本 //json兼容原showui 格式 var showui_json = { "title": "触动精灵脚本配置", //给页面添加标题(默认标题无) "cancelname": "取消", //给页面取消按钮添加文字(默认文字无) "config": "save_01", "okname": "开始", //给页面开始按钮添加文字(默认“开始”) "style": "default", "timer": 30, "orient": 0, "pagetype": "multi", "view": [{ "type": "Label", "text": "标题1", "size": 18, "align": "center", "color": "0,168,233" }, { "type": "Image", "src": "http://www.touchsprite.com/wp-content/uploads/2016/10/banner2_790x230-790x0.png" }, { "type": "Label", "text": "switches控件", "size": 16, "align": "left", "color": "0,168,233" }, { "type": "switches", "list": "开关1,开关2,开关3", "select": "0@2" }, { "type": "Label", "text": "RadioGroup控件", "size": 16, "align": "left", "color": "0,168,233" }, { "id": "ceshi4", "type": "RadioGroup", "list": "选项1,选项2,选项3", "select": "1" }, { "type": "Label", "text": "Edit控件(普通)", "size": 16, "align": "left", "color": "0,168,233" }, { "id": "ceshi5", "type": "Edit", "prompt": "请输入一个字母", "text": "默认值", "kbtype": "ascii" }, { "type": "Label", "text": "Edit控件(多行)", "size": 16, "align": "left", "color": "0,168,233" }, { "id": "ceshi6", "type": "Edit", "prompt": "请输入一个字母", "text": "默认值", "row": "5", "kbtype": "ascii" }, { "type": "Label", "text": "Edit控件(滑块)", "size": 16, "align": "left", "color": "0,168,233" }, { "type": "Edit", "prompt": "请输入一个数字", "text": "2", "kbtype": "range", "max": "100", "min": "0", }, { "type": "Label", "text": "Edit控件(数字)", "size": 16, "align": "left", "color": "0,168,233" }, { "id": "ceshi7", "type": "Edit", "prompt": "请输入一个数字", "text": "123456", "kbtype": "number" }, { "type": "Label", "text": "Edit控件(密码)", "size": 16, "align": "left", "color": "0,168,233" }, { "id": "ceshi8", "type": "Edit", "prompt": "请输入密码", //已知小米8系统使用密码框会出现系统崩溃问题 "text": "hhkjkjh", "kbtype": "password" }, { "type": "Label", "text": "CheckBoxGroup控件", "size": 16, "align": "left", "color": "0,168,233" }, { "id": "ceshi9", "type": "CheckBoxGroup", "list": "选项1,选项2,选项3,选项4", "select": "0@3", }, { "type": "Label", "text": "ComboBox控件(二级)", "size": 16, "align": "left", "color": "0,168,233" }, { "id": "ceshi10", "type": "ComboBox", "list": "选项1,选项2,选项3", "select": "2", "data": "子选项1,子选项2,子选项3,子选项4#子选项5,子选项6,子选项7#子选项8,子选项9", "source": "test" }, { "type": "Label", "text": "ComboBox控件(一级)", "size": 16, "align": "left", "color": "0,168,233" }, { "id": "ceshi11", "type": "ComboBox", "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7", "select": "1" }] }; $.renderUI(showui_json); })(mui, document) ]]local thread = require('thread')local event = require('event')local ts = require('ts')local cjson = ts.json--创建webviewlocal showui_view,err = require('webview').new("myshowui", {html=html})assert(showui_view,err)event.register("showUI_commit",function(value) toast(cjson.encode(value),10) showui_view.close() end)event.register("showUI_cancel",function(value) showui_view.close() end)showui_view.show()thread.waitAllThreadExit()为触动增加无限可能,Lua扩展库

友友们是不是感觉触动精灵提供的插件调用起来不方便,触动内置的功能十分有限?你需要什么? 文件系统操作(新建、删除、建立符号链接)…… 文件格式解析(zip, rar, plist, deb)…… 网络操作(http, https, ftp, sftp, ftps, udp, smtp, imap)…… 图像处理(png, bmp, jpg, tiff)……

问题:有没有更加好用的 Lua 原生扩展方式呢? 答案:有!而且 Lua 扩展有很多!

Lua 的扩展(add-on)基本上来自于这两个网站: http://luaforge.net/projects https://rocks.moonscript.org

熟悉跨平台编译的开发者当然可以试试自己编译这当中的插件给 iOS 使用。 如果有 C 语言、Objective-C、C++ 开发能力的,当然也可以自己编写 Lua 原生扩展,还能使用 iOS 的 SDK。

用 Objective-C 给 Lua 编写扩展并在 iOS 平台上运行 关于如何编写 Lua 扩展,参见 Lua 官方文档,这里并不作介绍,以下实例及说明由 i82 提供。

mt.m:

#include #include #include "lua.h"#include "lualib.h"#include "lauxlib.h"#import #import #import /* 库 open 函数的前置声明 */int luaopen_mt(lua_State *L);/* Function mt_get_device_name * @return string device name */static int mt_get_device_name(lua_State *L){ NSString *name = [[UIDevice currentDevice] name]; const char * name_str = [name UTF8String]; lua_pushstring(L, name_str); return 1;}//注册函数库static const luaL_Reg mt_lib[] = { {"device_name", mt_get_device_name}, //获取设备名称 {NULL, NULL}};int luaopen_mt(lua_State *L){ luaL_newlib(L, mt_lib); return 1;}

单个源文件的编译与连接命令(将 gcc 换成 g++ 可使用 Objective-C++ 语法):

xcrun -sdk iphoneos gcc -arch armv7 -arch armv7s -arch arm64 -miphoneos-version-min=4.3 -O3 -std=c99 -I/opt/theos/include/ -c -o mt.o mt.mxcrun -sdk iphoneos gcc -arch armv7 -arch armv7s -arch arm64 -miphoneos-version-min=4.3 -O3 -framework Foundation -framework UIKit -bundle -undefined dynamic_lookup -o mt.so mt.o

得到的 mt.so 即可在 Lua 中引用了:

local mt = require "mt"print(mt.device_name())触动精灵 TSLib 函数扩展库

为了进一步降低脚本开发者门槛,触动精灵单独开发了 TSLib 函数扩展库,提供了一系列实用函数供开发者使用。 函数库开发手册:https://www.zybuluo.com/miniknife/note/293935 函数扩展库下载 函数:TSVersions 获取扩展库版本号 点击滑动类 函数:tap 触摸点击屏幕 函数:randomTap 随机点击屏幕 函数:moveTo 直线滑动 函数:moveTowards 角度直线滑动 函数:moveZoomOut 两点缩小 函数:moveZoomIn 两点放大 函数:moveCircleCenter 圆心弧度滑动 颜色判断类 函数:intToRgb 颜色转RGB 函数:rgbToInt RGB转颜色 函数:isColor 判断指定坐标的颜色 函数:multiColor 多点颜色判断 函数:multiColTap 多点颜色判断单点点击 函数:findMultiColorInRegionFuzzyByTable 点阵找色 开发调试类 函数:log 日志记录 文件操作类 函数:isFileExist 判断文件是否存在 函数:readFile 读文件内容返回table 函数:readFileString 读文件内容返回string 函数:writeFile 将table内容存入文件 函数:writeFileString 将string内容存入文件 函数:delFile 删除文件 应用信息类 函数:getAppName 获取应用名称 函数:getUserApp 获取用户安装非越狱应用 数据操作类 函数:strSplit 分割字符串 函数:httpGet get获取网页数据 函数:httpPost post提交数据 函数:inputStr 输入字符串 函数:getStrNum 获取字符串个数 函数:getRndNum 获取随机数 函数:snapAndSave 截图并保存到系统相册 函数:deepCopyTable 复制表 系统判断类 函数:getRender 获取屏幕的render值 函数:isDay 判断日期 clear 清理类模块 函数:clearAllPhotos 清空相册 函数:clearAllKeyChains 清空所有应用钥匙串信息 函数:clearIDFAV 清理 IDFAV 函数:clearPasteboard 清除剪贴板 函数:clearCookies 清除浏览器Cookies showUI 脚本配置界面 函数:checkTable 检查UItable 函数:getMode 获取 UI 模式 函数:neosUI 显示UI 便捷UI 函数:单选框 创建UI 函数:UILabel 文本标签 函数:UIRadio 单选框 函数:UIEdit 编辑框 函数:UICheck 多选框 函数:UICombo 下拉框 函数:UIComboRlt 联动下拉框 函数:UIComboRlts 联动关联框 函数:UIImage 图片框 函数:UIShow 显示UI

云打码扩展库

"本地光学字符识别" 简称本地 OCR,由于特征库、性能的限制,识别速度慢、识别率也比较差,触动精灵提供了 Lua 云打码扩展库来解决这一问题。 需要注意的是,帮你玩平台不能使用此函数库,小精灵平台要使用打码库请勾选网络插类型。 使用说明:https://www.zybuluo.com/miniknife/note/293935#ocr 云打码扩展库

注意事项:

触动苹果安卓,扩展库 v1.1.5以上版本支持,区别于官方打码 触动小精灵使用此打码库需要勾选 网络插件 类型 如果函数返回false都为网络错误超时 扩展库支持如下打码平台: http://www.chaorendama.com/ --QQ 超人 触动精灵云打码

"本地光学字符识别" 简称本地 OCR 由于特征库、性能的限制,识别速度慢、识别率也比较 差。触动精灵提供云打码扩展库来解决这一问题。该扩展库支持如下打码平台: http://www.hyocr.com/ --火眼

使用方法 下载扩展库,iOS将 cloudOcr.so 插件放入脚本 /lua 目录或插件/pluign 目录,Android将插件放入/data/data/com.touchsprite.android/目录下,在脚本开头插入 local ocr = require "cloudOcr" 即可。 安卓设备找不到该目录时需要使用第三方文件管理器,推荐re文件管理器 安装触动精灵 2.0 以上版本,在 更多- 插件中在线安装,在脚本开头插入 local ocr = require "cloudOcr" 即可。 企业版1.3.6及以上版本已内置本插件,无需额外下载 企业版用户如果不能正常使用本插件,建议使用基础扩展库的云打码 → ocr 云打码扩展库 插件下载

iOS v1.1.6 更新时间(2018-03-20):cloudOcr.so Android 真机 v1.1.6 更新时间(2018-03-20):cloudOcr.so 模拟器 v1.1.6 更新时间(2018-03-20):cloudOcr.so

函数:ocr.cloudOcrText、ocr.cloudOcrReportError、ocr.version 函数名称:云端打码、自动纠错、获取扩展库版本号 函数功能:云端打码、打码自动纠错、获取云打码扩展库版本号 函数方法: ret = ocr.cloudOcrText(op); 返回值:返回一个 table 参数 类型 说明 platform string 平台类型,火眼 - hyocr,建议使用 ocr 云打码扩展库 x1,y1 number 识别区域左上角顶点坐标 x2,y2 number 识别区域右下角顶点坐标 type string 打码类型,可在对应平台官网查询 username string 打码平台用户名,需用户去相应平台自行注册 password string 打码平台密码,需用户去相应平台自行注册 length number 打码长度(可选参数),默认为 0 timeout number 超时时间(可选参数),默认为 10 秒 scale number 缩放比例(可选参数),默认为 100,即不进行缩放 beizhu string 备注(可选参数),默认为空 返回值 类型 说明 ret.success boolean true 打码成功,false 失败 ret.text string 返回的识别结果,在 success == true 时存在 ressage string 消息,在 success == fasle 时,返回错误原因 ret.id table 打码标识,在 success == true 时存在,用于打码自动纠错

脚本实例:

local ocr = require "cloudOcr";local op = {--必填参数["platform"]="hyocr", --平台类型,具体参数参照参数表["x1"]=1848, --需要识别区域左上角坐标["y1"]=473,["x2"]=2029, --需要识别区域右下角坐标["y2"]=561,["type"]="52", --打码类型,可在对应平台官网查询["username"]="user", --打码平台账号["password"]="password", --打码平台密码--选填参数["length"]=4, --打码长度["timeout"]=30, --超时时间["scale"]=50, --缩放比例,范围10 - 200,在某些待识别区域过大的时候可设置此参数};local ret = ocr.cloudOcrText(op);if ret.success thendialog(ret.text,0)elsedialog(ressage,0)end--自动纠错local ocr = require "cloudOcr"; --载入扩展库local ret = ocr.cloudOcrText(op); --进行远程识别if ret.success thenret_1 = ocr.cloudOcrReportError(ret.id); --自动纠错,ret.id从ocr.cloudOcrText返回值中获取endlocal ocr = require "cloudOcr";local ver = ocr.version(); --获取扩展库版本号

注意事项:

最新云打码可在触动精灵 iOS v2.0 以上版本插件管理中下载安装,更加简单的方法 →建议使用 ocr 云打码扩展库。 打码函数传入的参数为 table 类型,使用时请参照参数表中详细说明。 如您使用火眼答题平台,用户名参数可以为空,密码串需要用户注册登陆后可以在火眼平台的后台查看到。。 帮你玩、小精灵使用此插件需自行将插件打包到脚本压缩包内或导入手机对应目录。 简易 SMTP 邮件发送库函数:mail.send 函数功能:发送邮件 函数方法 a = mail.send("[email protected]", "[email protected]", "Hello", "This is a test mail.", "smtp.gmail.com", "[email protected]", "*") 返回值:true 发送成功,其它字符串为失败原因 参数 类型 说明 参数 1 string 发送者邮件地址 参数 2 string 接收者邮件地址 参数 3 string 邮件主题 参数 4 string 邮件正文 参数 5 string SMTP 服务器 参数 6 string SMTP 鉴定用户名 参数 7 string SMTP 鉴定密码

脚本实例:

local mail = require "mail"a = mail.send("[email protected]", "[email protected]", "Hello", "This is a test mail.", "smtp.mxhichina.com", "[email protected]", "***")if a == true then --发送成功 dialog("Succeed!", 0)else dialog(a, 0)end

注意事项:

扩展库下载地址:https://pan.baidu.com/s/1ggR16Kz 密码:h2is, 下载后将 mail.so 放入 /var/mobile/Media/TouchSprite/plugin 即可在脚本中引用。 iOS 11 系统的设备,原 TouchSprite 文件夹下新增 plugin_ios11 快捷方式,连接到 usr/bin/tsplugin 如果系统是 iOS 11 则 tsp 自带 so 文件释放到该路径但 lua 文件释放路径保持不变 如果开发者想要手动导入 so 文件,也需要放到 usr/bin/tsplugin 目录下 触动精灵中 "os.execute" 应用

Lua 配合 os.execute 命令,可以使用触动精灵对 iOS 设备进行注销、关机、重启、清空缓存、解压、移动、复制、删除文件、创建文件夹等系统操作 帮你玩平台禁用此函数。

respring 注销--注销function respring()--帮你玩平台禁用此函数 os.execute("killall -9 SpringBoard");endpoweroff 关机--关机function poweroff()--帮你玩平台禁用此函数 os.execute("halt");endreboot 重启--重启function reboot()--帮你玩平台禁用此函数 os.execute("reboot");endclearCache 清空缓存--清空缓存function clearCache()--帮你玩平台禁用此函数 os.execute("su mobile -c uicache");enddelFile 删除文件--删除文件function delFile(path)--帮你玩平台禁用此函数 os.execute("rm -rf "..path);end

参数说明

参数 说明 path 要删除文件的路径,支持*通配符

脚本实例: 如要删除1.lua的文件,则输入:

delFile("/var/mobile/Media/TouchSprite/lua/1.lua");unzip 解压--解压zip文件function unzip(path,to)--帮你玩平台禁用此函数 os.execute("unzip "..path.." -d "..to);end

参数说明

参数 说明 path 为待解压文件的路径 to 要解压到的文件夹路径,默认不覆盖

脚本实例: 如要解压名为 1.zip 的文件,则输入:

unzip("/var/mobile/Media/TouchSprite/lua/1.zip","/var/mobile/Media/TouchSprite/lua/");movefile 移动文件--移动文件function movefile(path,to)--帮你玩平台禁用此函数 os.execute("mv "..path.." "..to);end

参数说明

参数 说明 path 待移动文件的路径,支持*通配符 to 要移动到的文件路径,注意先判断是否有重名文件或文件夹

脚本实例: 如要移动1.txt到lua/1.lua,则输入:

movefile("/var/mobile/Media/TouchSprite/lua/1.txt","/var/mobile/Media/TouchSprite/lua/1.lua");copyfile 复制文件--复制文件function copyfile(path,to) os.execute("cp -rf "..path.." "..to);end

参数说明

参数 说明 path 待复制文件的路径,支持*通配符 to 要复制到的文件路径,注意先判断是否有重名文件或文件夹。

脚本实例: 如要复制res/1.txt到lua/1.txt,则输入:

copyfile("/var/mobile/Media/TouchSprite/res/1.txt","/var/mobile/Media/TouchSprite/lua/1.txt");newfolder 创建文件夹--创建文件夹function newfolder(path)--帮你玩平台禁用此函数 os.execute("mkdir "..path);end

参数说明

参数 说明 path 要创建文件夹的路径

脚本实例: 如要创建test文件夹,则输入:

newfolder("/var/mobile/Media/TouchSprite/lua/test");触动精灵中"io库"应用readFile 将指定文件中的内容按行读取-将指定文件中的内容按行读取function readFile(path) local file = io.open(path,"r"); if file then local _list = {}; for l in file:lines() do table.insert(_list,l) end file:close(); return _list endendlist = readFile(userPath().."/lua/main.lua");

参数说明

参数 说明 返回值 path 要读取文件的路径 table getList 遍历文件--遍历文件function getList(path) local a = io.popen("ls "..path); local f = {}; for l in a:lines() do table.insert(f,l) end a:close() return fend

参数说明

参数 说明 返回值 path 要列举文件的文件夹的路径 table

脚本实例: 如要列举触动精灵lua文件夹下所有的脚本文件,则输入:

list = getList("/User/Media/TouchSprite/lua/");findFile 查找文件--查找文件function findFile(path) local a = io.popen("find "..path.." -prune"); local f = {}; for l in a:lines() do table.insert(f,l) end a:close() return fend

参数说明

参数 说明 返回值 path 要查找文件的路径,支持*通配符 table

脚本实例: 如要查找后缀为.lua的文件,则输入:

file = findFile("/User/Media/TouchSprite/lua/*.lua");file_exists 检测指定文件是否存在--检测指定文件是否存在function file_exists(file_name) local f = io.open(file_name, "r") return f ~= nil and f:close()end

参数说明

参数 说明 返回值 path 要查找文件的路径 true/false

脚本实例:

if file_exists("/User/Media/TouchSprite/lua/1.lua") then dialog("文件存在",0)else dialog("文件不存在",0)end函数:qrDecode 二维码解析(仅支持 Android)

函数名称:qrDecode 函数功能:将二维码图片解析为字符串,仅支持 Android v2.3.5.3 以上版本

函数方法: str =qrDecode(path) 参数 类型 说明 path string 解析二维码图片的路径,支持 jpg,png 等格式 返回值 类型 说明 str string 解析二维码得到的字符串

脚本实例:

str =qrDecode(userPath().."/res/1.png") --"1.jpg"(如只填文件名,默认为图片在触动 res 目录下)dialog(str,0)

注意:

并不是所有二维码都可以解析,推荐使用

触动精灵二维码识别库 使用说明 本扩展提供二维码识别的功能,以方便开发者可广泛适用于各类二维码 仅iOS平台可以使用 暂不支持微信面对面红包二维码的识别 扩展库下载 v1.0.2 更新时间:2018-08-20 仅支持 iOS11 及其以下系统 tsqr.so v1.0.3 更新时间:2019-03-08 仅支持 iOS12 及其以上系统 tsqr.so 函数: qr.qrDecode 二维码图片解析(仅支持iOS)

函数名称:qr.qrDecode 函数功能:将二维码图片解析为字符串,需要1.2.1及以上版本

函数方法: str = qr.qrDecode(path) 参数 类型 说明 path string 解析二维码图片的路径,支持jpg,png等格式 返回值 类型 说明 str string 解析二维码得到的字符串

脚本实例:

local qr = require("tsqr")str = qr.qrDecode(userPath().."/res/1.png") --"1.jpg"(如只填文件名,默认为图片在触动res目录下)dialog(str,0)触动精灵ts.so扩展库 本扩展库封装了大部分开发过程中需要的功能,适合有一定基础的开发者研究使用,使用得当可以以此开发出功能十分强大的脚本。 函数库开发手册地址:https://www.zybuluo.com/miniknife/note/671299 函数扩展库下载 说明:此扩展库通用于 iOS/Android 平台。

JSON 模块 FTP 模块 设备信息模块 字符串处理模块 HTTP 模块 HTTPS 模块 Socket 模块 PLIST 文件操作 SMTP 发送邮件 获取设备网络类型 Ping 测试网络连接情况 获取毫秒级时间戳 下载文件 二维码图片生成 简单数据存储 数据库操作 文件管理

触动精灵sz扩展库

为了进一步降低脚本开发者门槛,触动精灵iOS 2.x 以上版本集成了苏泽的扩展库,提供了一系列实用函数供开发者使用。

扩展库开发手册地址:https://www.zybuluo.com/miniknife/note/962878 附录iOS 设备分辨率一览表 设备 标准模式分辨率(px) 放大模式分辨率(px) iPhone4(S)/iPod Touch4G 640x960 - iPhone 5(S/C)/SE/iPod Touch5G(6G) 640x1136 - iPhone 6(S)/7/8 750x1334 640x1136 iPhone 6 P/6SP/7P/8P 1242x2208 1125x2001 iPhone X 1125x2436 - iPad 1/2/mini 768x1024 - TheNewiPad/iPad 4/Air/Air2 1536x2048 - iPad mini 2/mini 3/mini 4 1536x2048 - iPad Pro 2048×2732 -

注意事项: 触动引擎使用的是逻辑分辨率而不是物理分辨率

Lua math 库 函数名 描述 示例 结果 pi 圆周率 math.pi 3.1415926535898 abs 取绝对值 math.abs(-2012) 2012 ceil 向上取整 math.ceil(9.1) 10 floor 向下取整 math.floor(9.9) 9 max 取参数最大值 math.max(2,4,6,8) 8 min 取参数最小值 math.min(2,4,6,8) 2 pow 计算x的y次幂 math.pow(2,16) 65536 sqrt 开平方 math.sqrt(65536) 256 modf 取整数和小数部分 math.modf(20.12) 20 0.12 randomseed 设随机数种子 math.randomseed(os.time()) random 取随机数 math.random(5,90) 5 ~ 90 rad 角度转弧度 math.rad(180) 3.1415926535898 deg 弧度转角度 math.deg(math.pi) 180 exp e的x次方 math.exp(4) 54.598150033144 log 计算x的自然对数 math.log(54.598150033144) 4 log10 计算10为底,x的对数 math.log10(1000) 3 frexp 将参数拆成 x * (2 ^ y) 的形式 math.frexp(160) 0.625 8 ldexp 计算x * (2 ^ y) math.ldexp(0.625,8) 160 sin 正弦 math.sin(math.rad(30)) 0.5 cos 余弦 math.cos(math.rad(60)) 0.5 tan 正切 math.tan(math.rad(45)) 1 asin 反正弦 math.deg(math.asin(0.5)) 30 acos 反余弦 math.deg(math.acos(0.5)) 60 atan 反正切 math.deg(math.atan(1)) 45 已知与触动精灵/帮你玩/小精灵/企业版 iOS 冲突的插件列表

如果您安装了以下插件导致触动精灵服务使用异常,请在Cydia 中卸载该插件后重新安装客户端。

冲突插件 导致问题 Stashing(内存修正插件) 会导致帮你玩无法注册和登录账号,提示文件获取失败 StatusHUD2 插件 会导致脚本showUI无法弹 PS/易天行(伪装地理位置插件) 会导致点击失效或服务无法启动 CCSettings(修改美化控制中心插件) 会导致脚本showUI无法弹出 协奏助手 会导致点击失效 按键精灵iOS 会导致UI弹出后点击【取消】【确定】无反应 xxplugin - coc/cok(xxplugin 系列插件) 会导致点击失效或服务无法启动 XY苹果助手 会导致点击失效或服务无法启动 约定的按键编码电话功能按键 键名 描述 键值 KEYCODE_HOME 按键Home 3 KEYCODE_BACK 返回键 4 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 6 KEYCODE_VOLUME_UP 音量增加键 24 KEYCODE_VOLUME_DOWN 音量减小键 25 KEYCODE_POWER 电源键 26 KEYCODE_CAMERA 拍照键 27 KEYCODE_FOCUS 拍照对焦键 80 KEYCODE_MENU 菜单键 82 KEYCODE_NOTIFICATION 通知键 83 KEYCODE_SEARCH 搜索键 84 KEYCODE_MUTE 话筒静音键 91 KEYCODE_VOLUME_MUTE 扬声器静音键 164 控制类按键 键名 描述 键值 KEYCODE_DPAD_UP 导航键 向上 19 KEYCODE_DPAD_DOWN 导航键 向下 20 KEYCODE_DPAD_LEFT 导航键 向左 21 KEYCODE_DPAD_RIGHT 导航键 向右 22 KEYCODE_DPAD_CENTER 导航键 确定键 23 KEYCODE_TAB Tab键 61 KEYCODE_ENTER 回车键 66 KEYCODE_DEL 退格键 67 KEYCODE_PAGE_UP 向上翻页键 92 KEYCODE_PAGE_DOWN 向下翻页键 93 KEYCODE_ESCAPE ESC键 111 KEYCODE_FORWARD_DEL 删除键 112 KEYCODE_CAPS_LOCK 大写锁定键 115 KEYCODE_SCROLL_LOCK 滚动锁定键 116 KEYCODE_BREAK Break/Pause键 121 KEYCODE_MOVE_HOME 光标移动到开始键 122 KEYCODE_MOVE_END 光标移动到末尾键 123 KEYCODE_INSERT 插入键 124 KEYCODE_NUM_LOCK 小键盘锁 143 KEYCODE_ZOOM_IN 放大键 168 KEYCODE_ZOOM_OUT 缩小键 169 基本类按键 键名 描述 键值 KEYCODE_0 按键'0' 7 KEYCODE_1 按键'1' 8 KEYCODE_2 按键'2' 9 KEYCODE_3 按键'3' 10 KEYCODE_4 按键'4' 11 KEYCODE_5 按键'5' 12 KEYCODE_6 按键'6' 13 KEYCODE_7 按键'7' 14 KEYCODE_8 按键'8' 15 KEYCODE_9 按键'9' 16 KEYCODE_A 按键'A' 29 KEYCODE_B 按键'B' 30 KEYCODE_C 按键'C' 31 KEYCODE_D 按键'D' 32 KEYCODE_E 按键'E' 33 KEYCODE_F 按键'F' 34 KEYCODE_G 按键'G' 35 KEYCODE_H 按键'H' 36 KEYCODE_I 按键'I' 37 KEYCODE_J 按键'J' 38 KEYCODE_K 按键'K' 39 KEYCODE_L 按键'L' 40 KEYCODE_M 按键'M' 41 KEYCODE_N 按键'N' 42 KEYCODE_O 按键'O' 43 KEYCODE_P 按键'P' 44 KEYCODE_Q 按键'Q' 45 KEYCODE_R 按键'R' 46 KEYCODE_S 按键'S' 47 KEYCODE_T 按键'T' 48 KEYCODE_U 按键'U' 49 KEYCODE_V 按键'V' 50 KEYCODE_W 按键'W' 51 KEYCODE_X 按键'X' 52 KEYCODE_Y 按键'Y' 53 KEYCODE_Z 按键'Z' 54 安卓手机如何开启系统悬浮窗权限

小米

设置 - (界面底部)其他应用管理 - 触动精灵 - 应用详情界面上滑 - (底部)权限管理 - 悬浮窗管理 - (弹出的底部菜单)选择允许 安全中心 - 授权管理 - 应用权限管理 - 小精灵名称 - 显示悬浮窗 - 开启

华为

设置 - 全部设置 - 隐私和安全- 通知管理 - 悬浮窗管理 - 小精灵名称 - 打开开关 -手机管家 - 悬浮窗管理 - 小精灵名称 - 开启悬浮窗

魅族魅蓝

设置 - (左侧栏)应用管理 - 小精灵名称 - 权限管理- 弹框消息一览 - 点击右侧按钮 - 按钮为绿色时为打开状态 -安全中心 - 授权管理 - 小精灵名称 - 悬浮窗 - 开启

OPPO

安全中心 - 权限隐私 - 应用权限管理 - 悬浮窗管理 - 小精灵名称 - 打开开关

乐视

管家 - 权限管理 - 应用权限管理 - 权限管理 - 小精灵名称 - 显示悬浮窗 - 开启

锤子坚果

安全中心 - 应用程序权限管理 - 其他 - 桌面悬浮窗 - 小精灵名称 - 打开开关

默认开启悬浮窗权限的手机

三星 vivo 酷派 金立 设备 SSH 连接工具 WinSCP 简体中文语言包 Putty 相关工具运行库 VCredist 2010 NET Framework 4 LuaSQLite

http://lua.sqlite.org/index.cgi/doc/tip/doc/lsqlite3.wiki

iOS 系统设置参数对照表 参数 说明 prefs:root=WIFI WIFI prefs:root=INTERNET_TETHERING 个人热点 prefs:root=MOBILE_DATA_SETTINGS_ID 蜂窝设置 prefs:root=Privacy 隐私 prefs:root=General&path 通用 prefs:root=LOCATION_SERVICES 定位服务 prefs:root=VPN VPN prefs:root=General&path=About 关于 prefs:root=General&path=ACCESSIBILITY 辅助功能 prefs:root=AIRPLANE_MODE 飞行模式 prefs:root=General&path=AUTOLOCK 自动锁屏时间 prefs:root=General&path=USAGE 用量 prefs:root=Brightness 亮度 prefs:root=General&path=Bluetooth 蓝牙 prefs:root=General&path=DATE_AND_TIME 日期和时间 prefs:root=FACETIME Facetime设置 prefs:root=General&path=Keyboard 键盘设置 prefs:root=CASTLE Icloud prefs:root=CASTLE&path=STORAGE_AND_BACKUP 备份 prefs:root=General&path=INTERNATIONAL 语言与地区设置 prefs:root=ACCOUNT_SETTINGS 账户设置 prefs:root=MUSIC 音乐 prefs:root=MUSIC&path=EQ EQ均衡器 prefs:root= 设置 prefs:root=NOTES 备忘录 prefs:root=NOTIFICATIONS_ID 通知 prefs:root=Phone 电话设置 prefs:root=Photos 照片与相机设置 prefs:root=General&path=Reset 还原 prefs:root=Sounds&path=Ringtone 铃声设置 prefs:root=Safari Safari prefs:root=Sounds 声音 prefs:root=General&path=SOFTWARE_UPDATE_LINK 系统更新 prefs:root=STORE STORE设置 prefs:root=VIDEO 视频设置 prefs:root=Wallpaper 壁纸设置 按键码表[字母] 按键码 说明 "a" a or A "b" b or B "c" c or C "d" d or D "e" e or E "f" f or F "g" g or G "h" h or H "i" i or I "j" j or J "k" k or K "l" l or L "m" m or M "n" n or N "o" o or O "p" p or P "q" q or Q "r" r or R "s" s or S "t" t or T "u" u or U "v" v or V "w" w or W "x" x or X "y" y or Y "z" z or Z 按键码表[数字] 按键码 说明 "0" 1 or ! "1" 2 or @ "2" 3 or # "3" 4 or $ "4" 5 or % "5" 6 or ^ "6" 7 or & "7" 8 or * "8" 9 or ( "9" 0 or ) 按键码表[其他] 按键码 说明 "Hyphen" - or _ "EqualSign" = or + "OpenBracket" [ or { "CloseBracket" ] or } "Backslash" \ or l "NonUSPound" Non-US # or _ "Semicolon" ; or : "Quote" ' or " "GraveAccentAndTilde" Grave Accent and Tilde "Comma" , or "Slash" / or ? 按键码表[更多请自行尝试]"ReturnOrEnter" /* Return (Enter) */"Escape" /* Escape */"DeleteOrBackspace" /* Delete (Backspace) */"Tab" /* Tab */"Spacebar" /* Spacebar */"CapsLock" /* Caps Lock */"F1" /* F1 */"F2" /* F2 */"F3" /* F3 */"F4" /* F4 */"F5" /* F5 */"F6" /* F6 */"F7" /* F7 */"F8" /* F8 */"F9" /* F9 */"F10" /* F10 */"F11" /* F11 */"F12" /* F12 */"PrintScreen" /* Print Screen */"ScrollLock" /* Scroll Lock */"Pause" /* Pause */"Insert" /* Insert */"Home" /* Home */"PageUp" /* Page Up */"DeleteForward" /* Delete Forward */"End" /* End */"PageDown", /* Page Down */"RightArrow" /* Right Arrow */"LeftArrow" /* Left Arrow */"DownArrow" /* Down Arrow */"UpArrow" /* Up Arrow */"KeypadNumLock" /* Keypad NumLock or Clear */"KeypadSlash" /* Keypad / */"KeypadAsterisk" /* Keypad * */"KeypadHyphen" /* Keypad - */"KeypadPlus" /* Keypad + */"KeypadEnter" /* Keypad Enter */"Keypad1" /* Keypad 1 or End */"Keypad2" /* Keypad 2 or Down Arrow */"Keypad3" /* Keypad 3 or Page Down */"Keypad4" /* Keypad 4 or Left Arrow */"Keypad5" /* Keypad 5 */"Keypad6" /* Keypad 6 or Right Arrow */"Keypad7" /* Keypad 7 or Home */"Keypad8" /* Keypad 8 or Up Arrow */"Keypad9" /* Keypad 9 or Page Up */"Keypad0" /* Keypad 0 or Insert */"KeypadPeriod" /* Keypad . or Delete */"NonUSBackslash" /* Non-US \ or | */"Application" /* Application */"Power" /* Power */"EqualSign" /* Keypad = */"F13" /* F13 */"F14" /* F14 */"F15" /* F15 */"F16" /* F16 */"F17" /* F17 */"F18" /* F18 */"F19" /* F19 */"F20" /* F20 */"F21" /* F21 */"F22" /* F22 */"F23" /* F23 */"F24" /* F24 */"Execute" /* Execute */"Help" /* Help */"Menu" /* Menu */"Select" /* Select */"Stop" /* Stop */"Again" /* Again */"Undo" /* Undo */"Cut" /* Cut */"Copy" /* Copy */"Paste" /* Paste */"Find" /* Find */"Mute" /* Mute */"VolumeUp" /* Volume Up */"VolumeDown" /* Volume Down */"LockingCapsLock" /* Locking Caps Lock */"LockingNumLock" /* Locking Num Lock */"LockingScrollLock" /* Locking Scroll Lock */"Comma" /* Keypad Comma */"EqualSignAS400", /* Keypad Equal Sign for AS/400 */"International1", /* International1 */"International2", /* International2 */"International3", /* International3 */"International4", /* International4 */"International5", /* International5 */"International6", /* International6 */"International7", /* International7 */"International8", /* International8 */"International9", /* International9 */"LANG1" /* LANG1 */"LANG2" /* LANG2 */"LANG3" /* LANG3 */"LANG4" /* LANG4 */"LANG5" /* LANG5 */"LANG6" /* LANG6 */"LANG7" /* LANG7 */"LANG8" /* LANG8 */"LANG9" /* LANG9 */"AlternateErase" /* AlternateErase */"SysReqOrAttention" /* SysReq/Attention */"Cancel" /* Cancel */"Clear" /* Clear */"Prior" /* Prior */"Return" /* Return */"Separator" /* Separator */"Out" /* Out */"Oper" /* Oper */"ClearOrAgain" /* Clear/Again */"CrSelOrProps" /* CrSel/Props */"ExSel" /* ExSel */"LeftControl" /* Left Control */"LeftShift" /* Left Shift */"LeftAlt" /* Left Alt */"LeftGUI" /* Left GUI */"RightControl" /* Right Control */"RightShift" /* Right Shift */"RightAlt" /* Right Alt */"RightGUI" /* Right GUI */"ErrorRollOver", /* ErrorRollOver */"POSTFail", /* POSTFail */"ErrorUndefined", /* ErrorUndefined */


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有