多语言展示
当前在线:247今日阅读:75今日分享:44

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

现场直播在inputbox窗口上显示验证码图片,并且将我们输入的验证码值返回给脚本进行处理。
工具/原料

按键精灵2014

方法/步骤
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)

5

轩辕传奇验证窗口

7

NO.2-判断验证窗口是否出现获取  “验证码”字样图片的所在位置,   判断图片是否存在,存在则说明验证窗口出现。方法 :以屏幕左上角的坐标为起点(0,0),从而获取到的游戏中“验证码”图片出现的位置。步骤1:计算出“验证码”图片左上角坐标、右下角坐标与游戏窗口左上角坐标的距离。

8

步骤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,intYIf intX > 0 And intY > 0 Then //End If  有些游戏的验证窗口出现的位置是随机的。这种情况,只能将找图范围设置为窗口客户区大小去找图。观察验证窗口的随机位置,没有被随机到的位置尽量排除在找图范围外,找图范围越小效率越高

9

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

10

▶ 验证码位置计算与NO.2中找'验证码'文字图片的计法是一样的。

11

▶ 使用图像插件中 PrintScreen 命令截图保存验证码。   Call Plugin.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)Global 图片路径,x1,y1,xx1,yy1     //局部变量的值不支持线程传递,需要定义全局变量Function 弹出输入验证码框(图片地址,x,y,xx,yy)    图片路径=图片地址:x1=x:y1=y:xx1=xx:yy1=yy    线程ID=BeginThread(线程)  //启动线程等待获取inputbox窗口句柄    弹出输入验证码框=InputBox('','请输入验证码')    StopThread 线程IDEnd FunctionSub 线程()     do        Hwnd = Plugin.Window.Find('#32770', '请输入验证码')    Loop while (Hwnd=0) //循环找InputBox窗口句柄,找到则退出循环,继续后续操作    Hwnd = Plugin.Window.FindEx(Hwnd, 0, 'Static', '') // 图片不能在输入框、命令按钮上显示,所以需要找类名为static的InputBox的子窗口,作为显示图片的对象     call 在窗口上贴图(Hwnd,图片路径,x1,y1,xx1,yy1,3)  //调用贴图的子程序End SubSub 在窗口上贴图(句柄,图片地址,x,y,xx,yy,显示方式)    //显示方式为1 是拉伸,显示方式为3 是原大小    图像句柄=Plugin.WndEx6.CreatePictureRgn (句柄,x,y,xx,yy) //建立一个用于显示图片的区域    call Plugin.WndEx6.SetPictureRgnStyle (图像句柄,显示方式)//设置图片显示的方式    do        call Plugin.WndEx6.SetPictureRgnImage (图像句柄,图片地址) //设置显示图片区域里要显示的图片        Delay 50    Loop End Sub

14

整体代码hwnd = Plugin.Window.MousePoint() sText = Plugin.Window.GetText(Hwnd) //获取窗口标题If sText = '轩辕传奇.jpg - Windows 照片查看器' Then //判断下是不是要操作的窗口    Call Plugin.Window.size(hwnd, 800, 600)Else     MessageBox '鼠标没有指向游戏窗口'    EndScriptEnd If 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,intYIf intX > 0 And intY > 0 Then      Call Plugin.Pic.PrintScreen(窗口左上角x坐标 + 310, 窗口左上角y坐标 + 233, 窗口左上角x坐标 + 430, 窗口左上角y坐标 + 278, 'F:\验证码.bmp')     jieguo = 弹出输入验证码框('F:\验证码.bmp', 0, 0, 100, 100)End If Global 图片路径,x1,y1,xx1,yy1Function 弹出输入验证码框(图片地址,x,y,xx,yy)    图片路径=图片地址:x1=x:y1=y:xx1=xx:yy1=yy    线程ID=BeginThread(线程)    弹出输入验证码框=InputBox('','请输入验证码')    StopThread 线程IDEnd FunctionSub 线程()    do        Hwnd = Plugin.Window.Find('#32770', '请输入验证码')    Loop while (Hwnd=0)    Hwnd= Plugin.Window.FindEx(Hwnd, 0,'Static','')    call 在窗口上贴图(Hwnd,图片路径,x1,y1,xx1,yy1,2)End SubSub 在窗口上贴图(句柄,图片地址,x,y,xx,yy,显示方式)    //显示方式为1 是拉伸,显示方式为3 是原大小    图像句柄=Plugin.WndEx6.CreatePictureRgn (句柄,x,y,xx,yy)    call Plugin.WndEx6.SetPictureRgnStyle (图像句柄,显示方式)    do        call Plugin.WndEx6.SetPictureRgnImage (图像句柄,图片地址)        Delay 50    Loop End Sub

推荐信息