制作游戏辅助使用函数窗口处理验证码.docx
- 文档编号:8810085
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:10
- 大小:913.95KB
制作游戏辅助使用函数窗口处理验证码.docx
《制作游戏辅助使用函数窗口处理验证码.docx》由会员分享,可在线阅读,更多相关《制作游戏辅助使用函数窗口处理验证码.docx(10页珍藏版)》请在冰豆网上搜索。
制作游戏辅助使用函数窗口处理验证码
制作游戏辅助:
使用函数窗口处理验证码
来源:
按键学院【按键精灵】
现场直播在inputbox窗口上显示验证码图片,并且将我们输入的验证码值返回给脚本进行处理。
进入主题~
我们知道,如果是在QUI界面上显示图片,轻轻松松一个图像控件就可以搞定。
那为何要作死去挑战什么 inputbox窗口显示图片呢?
——为什么呢?
因为图像控件加载图片不是一般的龟速,而验证码输入追求的就是速度~
我们用轩辕传奇游戏作为例子,看看一个用inputbox来显示验证码,并且返回数据答验证的脚本,要如何实现~
脚本思路:
1、获取游戏窗口句柄。
2、判断验证码窗口是否出现。
3、计算验证码图片所在区域范围,使用图像插件命令PrintScreen截取验证码图片。
4、使用361度插件图像显示命令,在inputbox窗口上显示图像。
5、将inputbox返回值输入到游戏验证码输入框。
NO.1-获取游戏窗口句柄
♥ 方法1:
使用 MousePoint鼠标指向窗口命令获取窗口句柄
//此方法适用于需要一个个绑定窗口的情况
hwnd=Plugin.Window.MousePoint()
♥ 方法2:
使用 SearchEx遍历符合窗口命令获取窗口句柄
//此方法适用于一键绑定所有游戏窗口的情况
HwndEx=Plugin.Window.SearchEx("GEMAINWINDOWCLASS","轩辕传奇",0)
参数1:
窗口符合的类名
参数2:
窗口符合的标题
参数3:
搜索方式(0:
模糊,1:
精确)
"GEMAINWINDOWCLASS":
轩辕传奇游戏窗口的类名。
HwndEx中存放的是获取到的窗口句柄,如果有多个符合要求的句柄,句柄与句柄之间用"|"连接起来。
如果有多个窗口,我们需要通过split分割函数,把窗口句柄分割出来使用。
窗口句柄分割例子:
MyArray=Split(HwndEx,"|")
IfUBound(MyArray)>=0Then
i=0
ForUBound(MyArray)
//下面这句将字符串转换成数值
Msgbox"第"&i+1&"个窗口句柄为:
"&Clng(MyArray(i))
i=i+1
Next
EndIf
如果SearchEx命令无法遍历到窗口。
我们还可以使用findex查找子窗口命令来查找。
//轩辕传奇游戏窗口的父窗口是桌面
Hwnd=Plugin.Window.findex(0,0,"GEMAINWINDOWCLASS",0)
参数1:
父窗口句柄
参数2:
子窗口句柄
参数3:
匹配类名
参数4:
匹配标题
桌面句柄=0
轩辕传奇验证窗口
ps:
小编登录了游戏,等了很久也没出现验证码TT ,所以用XX拿到的图片代替游戏窗口来讲解。
NO.2-判断验证窗口是否出现
获取
“验证码”字样图片的所在位置,
判断图片是否存在,存在则说明验证窗口出现。
方法:
以屏幕左上角的坐标为起点(0,0),从而获取到的游戏中“验证码”图片出现的位置。
步骤1:
计算出“验证码”图片左上角坐标、右下角坐标与游戏窗口左上角坐标的距离。
步骤2:
使用GetWindowRect命令获取游戏窗口左上角坐标。
sRect=Plugin.Window.GetClientRect(Hwnd)
MyArray=Split(sRect,"|")
步骤3:
窗口左上角坐标+图片左上角、右下角与窗口左上角的距离,获取图片的位置。
公式:
“验证码”图片左上角坐标(x,y)=(窗口左上角x坐标+257,窗口左上角y坐标+139)
“验证码”图片右下角坐标(x,y)=(窗口左上角x坐标+308,窗口左上角y坐
标+164)
步骤4:
使用findpic找图命令,查找"验证码"图片。
//"验证码"图片需加载到附件中
FindPic窗口左上角x坐标+257,窗口左上角y坐标+139,窗口左上角x坐标+308,窗口左上角y坐标+164,"Attachment:
\验证码.bmp",0.9,intX,intY
IfintX>0AndintY>0Then
//
EndIf
有些游戏的验证窗口出现的位置是随机的。
这种情况,只能将找图范围设置为窗口客户区大小去找图。
观察验证窗口的随机位置,没有被随机到的位置尽量排除在找图范围外,找图范围越小效率越高
NO.3-找验证码位置,截图保存验证码
▶ 验证码位置计算与NO.2中找"验证码"文字图片的计法是一样的。
▶ 使用图像插件中 PrintScreen命令截图保存验证码。
CallPlugin.Pic.PrintScreen(窗口左上角x坐标+310,窗口左上角y坐标+233,窗口左上角x坐标+430,窗口左上角y坐标+278,"F:
\验证码.bmp")
NO.4-使用361度窗口插件,将保存的验证码显示到InputBox窗口上
我们用到的361度插件命令有三个:
CreatePictureRgn (创建图像显示区域)
SetPictureRgnImage (设置图像显示区域里显示的图像)
SetPictureRgnStyle (设置图像显示区域样式)
显示验证码流程:
1、启动线程获取inputBox窗口句柄。
2、弹出InputBox窗口。
3、使用361度插件图像显示命令,在inputbox窗口上显示图像。
* inputbox是一个阻断命令,弹出inputBox窗口之后,余下的代码要等关闭了inputbox窗口才会继续进行。
所以需要先启用线程等候着,等待inputbox窗口出现之后,获取inputbox窗口句柄。
在InputBox窗口上显示图片源码:
jieguo=弹出输入验证码框("F:
\验证码.bmp",0,0,100,100)
Global图片路径,x1,y1,xx1,yy1//局部变量的值不支持线程传递,需要定义全局变量
Function弹出输入验证码框(图片地址,x,y,xx,yy)
图片路径=图片地址:
x1=x:
y1=y:
xx1=xx:
yy1=yy
线程ID=BeginThread(线程)//启动线程等待获取inputbox窗口句柄
弹出输入验证码框=InputBox("","请输入验证码")
StopThread线程ID
EndFunction
Sub线程()
do
Hwnd=Plugin.Window.Find("#32770","请输入验证码")
Loopwhile(Hwnd=0)//循环找InputBox窗口句柄,找到则退出循环,继续后续操作
Hwnd=Plugin.Window.FindEx(Hwnd,0,"Static","")//图片不能在输入框、命令按钮上显示,所以需要找类名为static的InputBox的子窗口,作为显示图片的对象
call在窗口上贴图(Hwnd,图片路径,x1,y1,xx1,yy1,3)//调用贴图的子程序
EndSub
Sub在窗口上贴图(句柄,图片地址,x,y,xx,yy,显示方式)
//显示方式为1是拉伸,显示方式为3是原大小
图像句柄=Plugin.WndEx6.CreatePictureRgn(句柄,x,y,xx,yy)//建立一个用于显示图片的区域
callPlugin.WndEx6.SetPictureRgnStyle(图像句柄,显示方式)//设置图片显示的方式
do
callPlugin.WndEx6.SetPictureRgnImage(图像句柄,图片地址)//设置显示图片区域里要显示的图片
Delay50
Loop
EndSub
整体代码
hwnd=Plugin.Window.MousePoint()
sText=Plugin.Window.GetText(Hwnd)//获取窗口标题
IfsText="轩辕传奇.jpg-Windows照片查看器"Then//判断下是不是要操作的窗口
CallPlugin.Window.size(hwnd,800,600)
Else
MessageBox"鼠标没有指向游戏窗口"
EndScript
EndIf
sRect=Plugin.Window.GetClientRect(Hwnd)//获取窗口客户区大小
MyArray=Split(sRect,"|")
窗口左上角x坐标=Clng(MyArray(0)):
窗口左上角y坐标=Clng(MyArray
(1))//获取窗口左上角坐标
FindPic窗口左上角x坐标+257,窗口左上角y坐标+139,窗口左上角x坐标+308,窗口左上角y坐标+164,"Attachment:
\验证码.bmp",0.9,intX,intY
IfintX>0AndintY>0Then
CallPlugin.Pic.PrintScreen(窗口左上角x坐标+310,窗口左上角y坐标+233,窗口左上角x坐标+430,窗口左上角y坐标+278,"F:
\验证码.bmp")
jieguo=弹出输入验证码框("F:
\验证码.bmp",0,0,100,100)
EndIf
Global图片路径,x1,y1,xx1,yy1
Function弹出输入验证码框(图片地址,x,y,xx,yy)
图片路径=图片地址:
x1=x:
y1=y:
xx1=xx:
yy1=yy
线程ID=BeginThread(线程)
弹出输入验证码框=InputBox("","请输入验证码")
StopThread线程ID
EndFunction
Sub线程()
do
Hwnd=Plugin.Window.Find("#32770","请输入验证码")
Loopwhile(Hwnd=0)
Hwnd=Plugin.Window.FindEx(Hwnd,0,"Static","")
call在窗口上贴图(Hwnd,图片路径,x1,y1,xx1,yy1,2)
EndSub
Sub在窗口上贴图(句柄,图片地址,x,y,xx,yy,显示方式)
//显示方式为1是拉伸,显示方式为3是原大小
图像句柄=Plugin.WndEx6.CreatePictureRgn(句柄,x,y,xx,yy)
callPlugin.WndEx6.SetPictureRgnStyle(图像句柄,显示方式)
do
callPlugin.WndEx6.SetPictureRgnImage(图像句柄,图片地址)
Delay50
Loop
EndSub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 制作 游戏 辅助 使用 函数 窗口 处理 验证