为方便使用,脚本精灵所有的功能都集中在控制条上,控制条可任意拖动,缩小,吸附。并且不与其他应用或者游戏冲突,使用起来就像游戏自带的工具一样方便。 可随时切换脚本、测试脚本、导入脚本、播放脚本、录制脚本、截图等,不需要退出游戏。
控制条分为三种状态:展开态、缩小态、吸附态。在展开的状态下,10秒后自动变为收缩态,在收缩态下移动到屏幕边缘会转变为吸附态。
点击控制条的第二个按钮即可进入脚本管理面板,脚本分为二进制脚本和明文脚本,明文脚本一般为录制的脚本。二进制脚本是 经过脚本精灵开发工具加密和压缩的脚本。脚本管理提供设置当前脚本、删除脚本、导入脚本、切换脚本等功能。
控制条的第三个按钮为控制脚本播放的按钮,在播放前,先要设置一个当前脚本,明文脚本和二进制脚本都可以。 点击播放后,可以选择播放一次或者循环播放。播放开始后播放按钮变为停止按钮。播放结束后,重新变为播放按钮。
脚本精灵提供一个电脑端的开发工具,提供一个脚本编辑器,具有工程管理、关键字高亮、函数库高亮、脚本检错、编译加密脚本、 远程屏幕、远程截屏、远程取色、远程取坐标、远程导入等功能。如果有wifi支持,完全不需要用数据线。
脚本精灵的的脚本引擎基于Lua 5.2.2,并对其进行了一些修改,将编译器也集成在一起,并支持中文函数名、中文变量名。 保留了Lua 5.2.2所有的语法规范和内置库函数。
模拟点击屏幕
touchClick(x,y)
touchClick(100,100); --触摸点击坐标(100,100)
模拟按下手指
touchDown(x,y,id)
touchDown(100,100); --手指0按下坐标(100,100) touchDown(200,200,1); --手指1按下坐标(200,200)
模拟弹起手指
touchUp(id)
touchUp(); --手指0弹起 touchUp(1); --手指1弹起
模拟手指在屏幕上滑动,滑动前需要先调用触摸按下函数
touchMove(x,y,id)
touchDown(100,100); --手指0按下坐标(100,100) touchDown(200,200,1); --手指1按下坐标(200,200) touchMove(300,300); --手指0滑动到坐标(300,300) touchMove(50,50,1); --手指1按下坐标(200,200) touchUp(0); --手指0弹起 touchUp(1); --手指1弹起
在当前屏幕上获得焦点的文本框中输入一个文本字符串,目前只支持字母、数字和空格
input(text)
input("10086"); --输入10086
input("ab 11"); --输入ab 11
模拟点击设备上的按键,如0-9的数字,a-z的字母,返回键,确认键、HOME键等
input(code)
input(4); --点击返回键
获取屏幕上指定坐标的颜色值
getColor(x,y)
local color = getColor(100,100); --获取屏幕上坐标(100,100)处的颜色值
在一个范围内寻找指定颜色,如果没有填写范围参数,则全屏找色
findColor(color,x1,y1,x2,y2)
local flag,x,y = findColor(0xFF0000,100,100,200,200); --在屏幕范围(100,100,200,200)内寻找纯红色(0xFF0000)
if flag then
toast("在坐标("..x..","..y..")处找到了颜色0xFF0000");
end
在一个范围内寻找指定颜色,如果没有填写范围参数,则全屏找色,另外加一个相似值,表示相近的颜色也匹配,建议使用80
findColorFuzzy(color,clarity,x1,y1,x2,y2)
local flag,x,y = findColorFuzzy(0xFF0000,80,100,100,200,200); --在屏幕范围(100,100,200,200)内以相似度80%寻找纯红色(0xFF0000)
if flag then
toast("在坐标("..x..","..y..")处找到了红颜色");
end
使用指定的红绿蓝三种颜色合成一个颜色值
RGB(r,g,b)
--将红、绿、蓝对应的值:0,255,0合成一个颜色值,这里合成后为一个纯绿色颜色值。执行后,rgb等于0x00FF00等于65280 local rgb = RGB(0,255,0);
获取屏幕上指定坐标的颜色的RGB值
getColorRGB(x,y)
local r,g,b = getColorRGB(100,100); --获取屏幕上坐标(100,100)处的颜色值的RGB值分别存入r,g,b三个变量中
判断指定坐标的颜色。PS:使用该函数(多点确定一个图或多个图)代替寻图函数可以大大的提高脚本的执行速度和性能。
isColor(x,y,color)
--判断屏幕上坐标(100,100)处的颜色值是否为0xFFFFFF,是就点击坐标(200,200) if isColor(100,100,0xFFFFFF) then touchClick(200,200); end
在屏幕中寻找指定的图片,精确度为100%,即不能有一个字节的不匹配才算找到图片。 图片路径必须是相对脚本工程的路径,图片路径参考图片路径
findImage(path)
--在屏幕中寻找图片[截图/1.bmp],如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImage("截图/1.bmp")
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中用精确寻图的方式寻找指定的图片,如果找到则自动计算该图片的中心坐标并点击
clickImage(path)
clickImage("截图/1.bmp") --点击图片[截图/1.bmp]
在屏幕中指定矩形范围内精确寻图,其他信息参见精确寻图
findImage(path,x1,y1,x2,y2)
--在屏幕中(100,100,200,200)范围内寻找图片[截图/1.bmp],如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImage("截图/1.bmp",100,100,200,200)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中模糊寻找指定图片,允许一定程度的不匹配
findImageFuzzy(path,clarity)
--在屏幕中设置清晰度为95%,全屏模糊寻找图片[截图/1.bmp],如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzy("截图/1.bmp",95)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中指定矩形范围内模糊寻图,更多信息请参见模糊寻图
findImageFuzzy(path,clarity,x1,y1,x2,y2)
--设置清晰度为95%,在屏幕中(100,100,200,200)范围内模糊寻找图片[截图/1.bmp],如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzy("截图/1.bmp",95,100,100,200,200)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
else
toast("没有找到图片[1.bmp]");
end
在屏幕中寻找指定图片,可以忽略一个颜色值。也称为透明寻图、背景寻图。
findImageIrregular(path,ignoreColor)
--在屏幕中不规则寻找图片[截图/1.bmp],忽略颜色0xFFFFFF(背景色),如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageIrregular("截图/1.bmp",0xFFFFFF)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中指定范围内不规则寻图。更多信息请参见不规则寻图。
findImageIrregular(path,ignoreColor,x1,y1,x2,y2)
--在屏幕中(100,100,200,200)范围内不规则寻找图片[截图/1.bmp],忽略颜色0xFFFFFF(背景色),如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzy("截图/1.bmp",0xFFFFFF,100,100,200,200)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中指定范围内不规则寻图。更多信息请参见 模糊寻图 和 不规则寻图。
findImageFuzzyIrregular(path,clarity,color)
--设置清晰度为95%,在屏幕中模糊并且不规则寻找图片[截图/1.bmp],忽略颜色0xFFFFFF(背景色),如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzy("截图/1.bmp",95,0xFFFFFF)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中指定范围内模糊不规则寻图。更多信息请参见 模糊不规则寻图。
findImageFuzzyIrregular(path,clarity,color,x1,y1,x2,y2)
--设置清晰度为95%,在屏幕中(100,100,200,200)范围内模糊并且不规则寻找图片[截图/1.bmp],忽略颜色0xFFFFFF(背景色),如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzyIrregular("截图/1.bmp",95,0xFFFFFF,100,100,200,200)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
脚本休眠指定毫秒数。
sleep(n)
toast("1100毫秒后,脚本继续执行..."); --提示信息,提示完后休眠1100毫秒
sleep(1000); --休眠1000毫秒,即1秒
sleep(100); --休眠100毫秒,即1/10秒
获取屏幕分辨率。
getResolutionRatio()
local w,h = getResolutionRatio(); --获取屏幕分辨率
toast(string.format("当前屏幕分辨率为:%dx%d",w,h)); --显示获取到的屏幕分辨率
获取屏幕色位,即获取当前屏幕设备一个颜色值占多少位。16/24/32
getBitsPerPixel()
local bits = getBitsPerPixel(); --获取屏幕色位
toast(string.format("当前屏幕分辨率为:%d",bits)); --显示获取到的屏幕色位
在屏幕中弹出文本提示,2.5秒后消失
toast(text)
toast("hello"); --显示hello
设备震动提示,只对支持震动的设备有效,一般对手机都有效,对平板无效。
vibrate(m)
vibrate(2000); --震动2秒
记录脚本中自定义的日志,日志自动保存在[/SD卡/ScriptElf/logs/[当天日期].log]下。日志会自动加上输出时间。该函数可支持开发平台的远程调试,在远程调试窗口中显示的文字为绿色。
log(text)
--记录日志信息“111111111”
log("111111111");
--执行后,假如当前时间为2013-7-24 12:32:20,则日志保存在文件:[/SD卡/ScriptElf/logs/2013-7-24.log]下。
--记录的日志内容为:2013-7-24 12:32:20 : 111111111
跟log()函数类似,区别是loge()函数在日志记录时间后面会加上“错误”两个字,在开发平台远程调试窗口中显示的文字为红色
loge(text)
--记录错误日志信息“坐标100,100的颜色不为0xFF0000”
loge("坐标100,100的颜色不为0xFF0000");
--执行后,假如当前时间为2013-7-24 12:32:20,则日志保存在文件:[/SD卡/ScriptElf/logs/2013-7-24.log]下。
--记录的日志内容为:2013-7-24 12:32:20 错误 : 坐标100,100的颜色不为0xFF0000
查找一个应用是否已经在手机中安装
findApp(pkgName)
--查找QQ是否安装,QQ的包名为“com.tencent.qq”
if findApp("com.tencent.qq") then
toast("未安装QQ");
else
toast("已安装QQ");
end
判断某应用是否正在运行
isRunning(pkgName)
--查找QQ是否正在运行,QQ的包名为“com.tencent.qq”
if isRunning("com.tencent.qq") then
toast("QQ正在运行中...");
else
toast("QQ未运行...");
end
启动指定应用
startApp(pkgName)
--如果QQ已经安装并且未启动则启动它,QQ的包名为“com.tencent.qq”,
local pkgName = “com.tencent.qq”;
if not findApp(pkgName) then --如果没有安装QQ,则提示未安装QQ
toast("QQ未安装");
elseif not isRunning(pkgName) then --否则如果已经安装QQ并且QQ没有运行,则启动QQ
startApp(pkgName);
end
结束一个正在运行的应用
kill(pkgName)
--如果QQ正在运行,则结束它,QQ的包名为“com.tencent.qq”
if isRunning("com.tencent.qq") then
kill("com.tencent.qq");
end
停止当前脚本的运行
exit()
--如果当前手机的UDID不等于“ALJFLJSLK32329FAKJL43434”,则退出当前脚本 if getUDID() ~= "ALJFLJSLK32329FAKJL43434" then exit(); end
获取设备上SD卡的绝对路径。
getSDCardPath()
--获取SD卡路径并显示出来 local sdcardPath = getSDCardPath(); toast(sdcardPath);
截取屏幕内容到图片文件,可指定范围截图。不指定范围则表示全屏截图。
screencapToFile(path,x1,y1,x2,y2)
--截取屏幕范围(100,100,200,200)保存到文件"[SD卡]/截图/[当前时间戳].bmp"
screencapToFile(string.format("%s/截图/%d.bmp",getSDCardPath(),os.time()),100,100,200,200);
拷贝文本到剪切板,可以配合输入法粘贴出来,支持中文。
copy(text)
--拷贝文本"你好abc123@@##¥¥0.0"到剪切板
copy("你好abc123@@##¥¥0.0")
--之后可操作输入法将其粘贴到文本框中
暂停指定应用的运行,执行后,应用将处于暂停状态,适合用在一些屏幕变化比较快的应用上。暂停时间不宜太长,使用resumeApp()函数可以恢复应用。
pauseApp(pkgName)
--暂停QQ
pauseApp("com.tencent.qq")
恢复指定应用的运行,一般用在被pauseApp()函数暂停的应用。
resumeApp(pkgName)
--恢复QQ的运行
resumeApp("com.tencent.qq")
获取设备综合唯一串,该串由脚本精灵根据当前设备硬件信息、操作系统信息、品牌数据综合计算而来,不同的两台设备得到的值必然不同
getUDID()
--获取当前UDID与指定的串"AFLJE324234LJNAD654343434SLSDL"比较,如果不相等,则提示未授权,然后退出脚本
if getUDID() ~= "AFLJE324234LJNAD654343434SLSDL" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前UDID串与指定串相等,可以继续往后执行脚本
获取设备网卡物理地址(MAC)
getWifiMAC()
--获取当前Wifi设备的MAC串与指定的串"aa:bb:cc:dd"比较,如果不相等,则提示未授权,然后退出脚本
if getWifiMAC() ~= "aa:bb:cc:dd" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前蓝牙设备MAC与指定串相等,可以继续往后执行脚本
获取蓝牙设备物理地址(MAC)
getBluetoothMAC()
--获取当前蓝牙设备的MAC串与指定的串"aa:bb:cc:dd"比较,如果不相等,则提示未授权,然后退出脚本
if getBluetoothMAC() ~= "aa:bb:cc:dd" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前蓝牙设备MAC与指定串相等,可以继续往后执行脚本
获取设备IMEI串
getIMEI()
--获取当前设备的IMEI串与指定的串"34345345345"比较,如果不相等,则提示未授权,然后退出脚本
if getIMEI() ~= "34345345345" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前设备IMEI串与指定串相等,可以继续往后执行脚本
获取脚本精灵根据设备信息计算而来的串
getDeviceInfo()
--获取当前设备的设备信息串与指定的串"34345345345"比较,如果不相等,则提示未授权,然后退出脚本
if getDeviceInfo() ~= "34345345345" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前设备信息串与指定串相等,可以继续往后执行脚本
获取当前设备的AndroidID
getAndroidID()
--获取当前设备的设备信息串与指定的串"23f23bjsadf3434"比较,如果不相等,则提示未授权,然后退出脚本
if getDeviceInfo() ~= "23f23bjsadf3434" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前设备AndroidID串与指定串相等,可以继续往后执行脚本
启动一个线程,相当于同时运行多个脚本
startThread(fun_name)
--定义线程函数
function my_thread(){
--线程里面定义一个死循环,或者其他功能代码
while true do
...
end
}
startThread("my_thread"); --指定线程函数为my_thread,启动线程
--执行到此处后,后面的代码和my_thread里面的代码将会同时运行
...
触摸点击的扩展函数,点击的坐标在一个范围内随机,可以防止某些游戏对重复有规律的动作检测
touchClickRandom(x,y,r,id)
--以随机因子5随机点击坐标(83,156),实际点击的坐标保存在x,y中,随机数保存在n中,这三个返回值可以忽略
local x,y,n = touchClickRandom(83,156,5);
toast(string.format("实际点击了(%d,%d),产生的随机数为:%d",x,y,n));
触摸按下的扩展函数,按下的坐标在一个范围内随机,可以防止某些游戏对重复有规律的动作检测
touchDownRandom(x,y,r,id)
--以随机因子5随机按下坐标(83,156),实际按下的坐标保存在x,y中,随机数保存在n中,这三个返回值可以忽略
local x,y,n = touchDownRandom(83,156,5);
toast(string.format("实际按下了(%d,%d),产生的随机数为:%d",x,y,n));
触摸滑动的扩展函数,滑动的坐标在一个范围内随机,可以防止某些游戏对重复有规律的动作检测
touchDownRandom(x,y,r,id)
--以随机因子5随机滑动到坐标(83,156),实际滑动到的坐标保存在x,y中,随机数保存在n中,这三个返回值可以忽略
local x,y,n = touchMoveRandom(83,156,5);
toast(string.format("实际滑动到了(%d,%d),产生的随机数为:%d",x,y,n));
可以访问一个网址,抓取网页内容,获取远程服务器数据,提交本地数据等。可用于服务器验证,用户授权,远程代码等。
httpGet(url)
--访问网址“http://scriptelf.duapp.com/test.txt”,获取内容并显示出来,该网址用浏览器打开看到内容与用httpGet访问获取到的内容是一致的
local content = httpGet("http://scriptelf.duapp.com/test.txt");
toast(content);
强制将当前脚本指定为兼容模式,只对当前脚本有效。
setCompatMode(b)
--强制指定当前脚本为兼容模式,兼容模式下有一些特定的函数。根据脚本的实际情况,有时候使用兼容模式找图找色效率更高 setCompatMode(true)
判断当前是否为兼容模式。(包括用户设置的或者脚本通过setCompatMode()函数强制设置的)
isCompatMode()
--兼容模式与优化模式的截图和色彩有时候会有差别,用isCompatMode()函数可以根据当前模式来选择要比对的图片或者颜色
--自定一个点击图片函数,根据当前模式和分辨率自动匹配要寻找的图片,准备好对应路径的图片后,调用时只需要传入图片名称就可以自动匹配适合当前手机或者平板的图片了
function myClickImage(img)
w,h = getResolutionRatio();
if isCompatMode() then
path = "兼容模式/"..w.."x"..h.."/";
else
path = "优化模式/"..w.."x"..h.."/";
end
path = path..img..".bmp";
return clickImage(path);
end
--调用,如果当前分辨率为480x854,模式为优化模式,则该函数会点击图片"优化模式/480x584/开始.bmp"
myClickImage("开始");
即设置是否自动获取屏幕比对数据,值在兼容模式下有效。在兼容模式下,寻图找色时需要大量拷贝内存,这样速度会很慢。实际情况下,比对图片或者找色不需要每次都重新截取屏幕数据,该函数设置为false后,所有的寻图找色函数都不再自动截屏,需要更新屏幕比对数据,调用screencap()函数即可
setAutoScreencap(b)
--该函数需要与screencap()函数配合使用,示例在screencap()函数中给出。
截取当前屏幕更新到比对缓冲区。该函数只有在兼容模式下,setAutoScreencap(false)时才有效。
screencap()
--screencap()和setAutoScreencap函数只有在兼容模式下有效,但是在优化模式下调用也不会有问题,因此这两个函数可以兼容这两种模式。
--当有连续的颜色比对或者图片比对,他们之间又没有流程顺序关系的话,可以将他们放在一屏上比对,可以避免每个比对都要重新截屏
setAutoScreencap(false); --设置当前为非自动截屏模式
while true do
screencap() --每循环一次更新一次比对缓冲区
if isColor(10,10,0xFF0000) and isColor(40,60,0xABA342) then
touchClick(40,60);
end
clickImage("截图/1.bmp");
clickImage("截图/2.bmp");
clickImage("截图/3.bmp");
clickImage("截图/4.bmp");
clickImage("截图/5.bmp");
clickImage("截图/6.bmp");
clickImage("截图/7.bmp");
clickImage("截图/8.bmp");
clickImage("截图/9.bmp");
clickImage("截图/10.bmp");
end
--在兼容模式下,以上代码每次循环只需要截取1次屏幕。如果没有设置setAutoScreencap(false)和调用screencap(),
--则每循环一次要截屏12次(找色、点击图片),而截屏是非常耗时间的。使用这两个函数,这段代码的速度相当于快了12倍。
使用log()函数可以记录脚本普通日志。使用loge()函数可以记录脚本错误日志。
意外逻辑是指在脚本正常流程之外的不一定经常发生但是必须处理的的逻辑,比如网络掉线、不定时弹窗、游戏进程意外结束等。对于这种情况很多人想到多线程。实际上多线程是很好的解决方法,但是在android平台下,脚本多线程会带来很多更麻烦的问题。目前脚本精灵暂不提供多线程,以后会陆续以更好的方式提供更简单易用的多线程。使用lua的协程,可以解决该问题,但没相应基础概念的人难学懂,代码也相对复杂。这里介绍一个比较简单的可以解决意外逻辑的方案,实际效果跟lua的协程一样。
--该函数专门处理意外情况。
function fortuitousHandler()
if [网络掉线] then
...
elseif [游戏没有运行] then
...
elseif [有人找你PK] then
...
elseif [临时弹窗] then
...
elseif [死亡] then
...
end
end
--假设这里是循环战斗。
while true do
fortuitousHandler();
[找怪]
[选怪]
[接任务]
[交任务]
end
--如果有操作是操作没完毕就不返回的死循环,因为出现意外情况可能导致该操作不返回,所以在这样的死循环里面也调用一下fortuitousHandler()来处理意外情况
| 虚拟码 | 常量 | 说明 |
|---|---|---|
| 0 | VK_UNKNOWN | 无 |
| 1 | VK_MENU | 菜单键 |
| 2 | VK_SOFT_RIGHT | |
| 3 | VK_HOME | HOME键 |
| 4 | VK_BACK | 返回键 |
| 5 | VK_ENDCALL | 挂电话键 |
| 6 | VK_0 | 数字0 |
| 7-16 | VK_0 - VK_9 | 数字0-9 |
| 17 | VK_STAR | |
| 18 | VK_POUND | |
| 19 | VK_DPAD_UP | |
| 20 | VK_DPAD_DOWN | |
| 21 | VK_DPAD_LEFT | |
| 22 | VK_DPAD_RIGHT | |
| 23 | VK_DPAD_CENTER | |
| 24 | VK_VOLUME_UP | 音量+ |
| 25 | VK_VOLUME_DOWN | 音量- |
| 26 | VK_POWER | 电源键 |
| 27 | VK_CAMERA | 照相键 |
| 28 | VK_CLEAR | 清除键 |
| 29-54 | VK_A - VK_Z | 字母A-Z |
| 66 | VK_ENTER | 确认键 |
| 84 | VK_SEARCH | 搜索键 |