制作游戏辅助:使用函数窗口处理验证码

2024-10-12 05:18:48

1、进入主题~我们知道,如果是在QUI界面上显示图片,轻轻松松一个图像控件就可以搞定。那为何要作死去挑战什么inputbox窗口显示图片呢?——为什么呢?因为图像控件加载图片不是一般的龟速,而验证码输入追求的就是速度~我们用轩辕传奇游戏作为例子,看看一个用inputbox来显示验证码,并且返回数据答验证的脚本,要如何实现~

2、脚本思路:1、获取游戏窗口句柄。2、判断验证码窗口是否出现。3、计算验证码图片所在区域范围,使用图像插件命令PrintScreen截取验证码图片。4、使用361度插件图像显示命令,在inputbox窗口上显示图像。5、将inputbox返回值输入到游戏验证码输入框。

3、NO.1-获取游戏窗口句柄♥方法1:使用MousePoint鼠标指向窗口命令获取窗口句柄//此方法适用于需要一个个绑定窗口的情况hwnd=Plugin.Window.MousePoint()♥方法2:使用SearchEx遍历符合窗口命令获取窗口句柄//此方法适用于一键绑定所有游戏窗口的情况HwndEx=Plugin.Window.SearchEx("GEMAINWINDOWCLASS","轩辕传奇",0)

4、参数1:窗口符合的类名参数2:窗口符合的标题参数3:搜索方式(0:模糊,1:精确)"GEMAINWINDOWCL帆歌达缒ASS":轩辕传奇游戏窗口的类名。HwndEx中存放的是获取到的窗口句柄,如果有多个符合要求的句柄,句柄与句柄之间用"|"连接起来。如果有多个窗口,我们需要通过split分割函数,把窗口句柄分割出来使用。窗口句柄分割例子:MyArray=Split(HwndEx,"|")IfUBound(MyArray)>=0Theni=0ForUBound(MyArray)//下面这句将字符串转换成数值Msgbox"第"&i+1&"个窗口句柄为:"&Clng(MyArray(i))i=i+1NextEndIf如果SearchEx命令无法遍历到窗口。我们还可以使用findex查找子窗口命令来查找。//轩辕传奇游戏窗口的父窗口是桌面Hwnd=Plugin.Window.findex(0,0,"GEMAINWINDOWCLASS",0)参数1:父窗口句柄参数2:子窗口句柄参数3:匹配类名参数4:匹配标题桌面句柄=0

5、轩辕传奇验证窗口

制作游戏辅助:使用函数窗口处理验证码

8、步骤2:使用GetWindowRect命令获取游戏窗口左上角坐标。sRect屏顿幂垂=Plugin.Window.GetClient伊怕锱鳏Rect(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,intYIfintX>0AndintY>0Then//EndIf有些游戏的验证窗口出现的位置是随机的。这种情况,只能将找图范围设置为窗口客户区大小去找图。观察验证窗口的随机位置,没有被随机到的位置尽量排除在找图范围外,找图范围越小效率越高

9、NO.3-找验证码位置,截图保存验证码

制作游戏辅助:使用函数窗口处理验证码

11、▶使用图像插件中PrintScreen命令截图保存验证码。CallPlugin.Pic.PrintScreen(窗口左上角x坐标+310,窗口左上角y坐标+233,窗口左上角x坐标+430,窗口左上角y坐标+278,"F:\验证码.bmp")

12、NO.4-使用361度窗口插件,将保存的验证码显示到InputBox窗口上我们用到的361度插件命令有三个:CreatePictureRgn(创建图像显示区域)SetPictureRgnImage(设置图像显示区域里显示的图像)SetPictureRgnStyle(设置图像显示区域样式)显示验证码流程:1、启动线程获取inputBox窗口句柄。2、弹出InputBox窗口。3、使用361度插件图像显示命令,在inputbox窗口上显示图像。*inputbox是一个阻断命令,弹出inputBox窗口之后,余下的代码要等关闭了inputbox窗口才会继续进行。所以需要先启用线程等候着,等待inputbox窗口出现之后,获取inputbox窗口句柄。

13、在InputBox窗口上显示图片源码:jieguo=弹出输入验证码框("掂迎豢畦F:\验证码.bmp",0,0,100,100)G造婷用痃lobal图片路径,x1,y1,xx1,yy1//局部变量的值不支持线程传递,需要定义全局变量Function弹出输入验证码框(图片地址,x,y,xx,yy)图片路径=图片地址:x1=x:y1=y:xx1=xx:yy1=yy线程ID=BeginThread(线程)//启动线程等待获取inputbox窗口句柄弹出输入验证码框=InputBox("","请输入验证码")StopThread线程IDEndFunctionSub线程()doHwnd=Plugin.Window.Find("#32770","请输入验证码")Loopwhile(Hwnd=0)//循环找InputBox窗口句柄,找到则退出循环,继续后续操作Hwnd=Plugin.Window.FindEx(Hwnd,0,"Static","")//图片不能在输入框、命令按钮上显示,所以需要找类名为static的InputBox的子窗口,作为显示图片的对象call在窗口上贴图(Hwnd,图片路径,x1,y1,xx1,yy1,3)//调用贴图的子程序EndSubSub在窗口上贴图(句柄,图片地址,x,y,xx,yy,显示方式)//显示方式为1是拉伸,显示方式为3是原大小图像句柄=Plugin.WndEx6.CreatePictureRgn(句柄,x,y,xx,yy)//建立一个用于显示图片的区域callPlugin.WndEx6.SetPictureRgnStyle(图像句柄,显示方式)//设置图片显示的方式docallPlugin.WndEx6.SetPictureRgnImage(图像句柄,图片地址)//设置显示图片区域里要显示的图片Delay50LoopEndSub

14、整体代码h嘛术铹砾wnd=Plugin.Window.MousePoint()sText=Plugin.Window.GetText(Hwnd)//获取轻拔吴悃窗口标题IfsText="轩辕传奇.jpg-Windows照片查看器"Then//判断下是不是要操作的窗口CallPlugin.Window.size(hwnd,800,600)ElseMessageBox"鼠标没有指向游戏窗口"EndScriptEndIfsRect=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,intYIfintX>0AndintY>0ThenCallPlugin.Pic.PrintScreen(窗口左上角x坐标+310,窗口左上角y坐标+233,窗口左上角x坐标+430,窗口左上角y坐标+278,"F:\验证码.bmp")jieguo=弹出输入验证码框("F:\验证码.bmp",0,0,100,100)EndIfGlobal图片路径,x1,y1,xx1,yy1Function弹出输入验证码框(图片地址,x,y,xx,yy)图片路径=图片地址:x1=x:y1=y:xx1=xx:yy1=yy线程ID=BeginThread(线程)弹出输入验证码框=InputBox("","请输入验证码")StopThread线程IDEndFunctionSub线程()doHwnd=Plugin.Window.Find("#32770","请输入验证码")Loopwhile(Hwnd=0)Hwnd=Plugin.Window.FindEx(Hwnd,0,"Static","")call在窗口上贴图(Hwnd,图片路径,x1,y1,xx1,yy1,2)EndSubSub在窗口上贴图(句柄,图片地址,x,y,xx,yy,显示方式)//显示方式为1是拉伸,显示方式为3是原大小图像句柄=Plugin.WndEx6.CreatePictureRgn(句柄,x,y,xx,yy)callPlugin.WndEx6.SetPictureRgnStyle(图像句柄,显示方式)docallPlugin.WndEx6.SetPictureRgnImage(图像句柄,图片地址)Delay50LoopEndSub

猜你喜欢