• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[技术交流] 【院刊】-【201411期】如何使用InputBox窗口处理验证码 [复制链接]

1#

如何使用InputBox窗口处理验证码


_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂__▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂▂_▂▂_▂▂


赶快搬板凳前来围观~ 现场直播在inputbox窗口上显示验证码图片,并且将我们输入的验证码值返回给脚本进行处理。 前排客官将有机会获得凤姐倾情自拍照一张,另小红花若干~~
[backcolor=rgb(255, 255, 255)]▂[backcolor=rgb(255, 255, 255)]_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂__▂_▂_▂_▂_▂_▂▂_▂_▂▂_▂_▂▂_▂▂_▂_▂[backcolor=rgb(255, 255, 255)]_▂▂_▂▂[backcolor=rgb(255, 255, 255)]_▂▂



进入主题~

我们用轩辕传奇游戏作为例子,看看一个用inputbox 来显示验证码,并且返回数据答验证的脚本,要如何实现~


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


NO.1-获取游戏窗口句柄


方法1使用 MousePoint 鼠标指向窗口命令 获取窗口句柄
//此方法适用于需要一个个绑定窗口的情况
  1. hwnd=Plugin.Window.MousePoint()
复制代码
[backcolor=rgb(255, 255, 255)] 方法2使用 SearchEx 遍历符合窗口命令 获取窗口句柄
//此方法适用于一键绑定所有游戏窗口的情况
  1. HwndEx=Plugin.Window.SearchEx("GEMAINWINDOWCLASS","轩辕传奇",0)
复制代码
参数1 : 窗口符合的类名
参数2 : 窗口符合的标题
参数3 : 搜索方式(0:模糊,1:精确)
"GEMAINWINDOWCLASS": 轩辕传奇游戏窗口的类名。
HwndEx中存放的是获取到的窗口句柄,如果有多个符合要求的句柄,句柄与句柄之间用 " | "连接起来。


如果有多个窗口,我们需要通过split分割函数,把窗口句柄分割出来使用。窗口句柄分割例子:
  1. MyArray = Split(HwndEx, "|")
  2. If UBound(MyArray)>=0 Then
  3. i=0
  4. For UBound(MyArray)
  5. //下面这句将字符串转换成数值
  6. Msgbox "第 "& i+1 & " 个窗口句柄为:"& Clng(MyArray(i))
  7. i=i+1
  8. Next
  9. End If
复制代码
如果SearchEx命令无法遍历到窗口。我们还可以使用findex查找子窗口命令来查找。
//轩辕传奇游戏窗口的父窗口是桌面
  1. Hwnd = Plugin.Window.findex(0, 0, "GEMAINWINDOWCLASS", 0)
复制代码

参数1 : 父窗口句柄
参数2 : 子窗口句柄
参数3 : 匹配类名
参数4: 匹配标题
桌面句柄=0


Findex查找子窗口命令,用法分析详见:【院刊】-【201409期】获取子窗口句柄遇到的多种情况



轩辕传奇验证窗口

您所在的用户组无法下载或查看附件

ps: 小编登录了游戏,等了很久也没出现验证码 TT ,所以用百度拿到的图片代替游戏窗口来讲解。



NO.2-判断验证窗口是否出现


获取
您所在的用户组无法下载或查看附件
“验证码”字样图片的所在位置
判断图片是否存在存在则说明验证窗口出现。


方法 :以屏幕左上角的坐标为起点(0,0),从而获取到的游戏中“验证码”图片出现的位置。
步骤1:计算出“验证码”图片左上角坐标、右下角坐标与游戏窗口左上角坐标的距离。


您所在的用户组无法下载或查看附件



步骤2:使用GetWindowRect命令获取游戏窗口左上角坐标。
  1. sRect = Plugin.Window.GetClientRect(Hwnd)
  2. MyArray = Split(sRect, "|")
复制代码
步骤3:窗口左上角坐标+图片左上角、右下角与窗口左上角的距离,获取图片的位置。
公式:“验证码”图片左上角坐标(x,y)=(窗口左上角x坐标+257,窗口左上角y坐标+139)
“验证码”图片右下角坐标(x,y)=(窗口左上角x坐标+308,窗口左上角y坐标+164)



步骤4:使用findpic找图命令,查找"验证码"图片。//"验证码"图片需加载到附件中
  1. FindPic 窗口左上角x坐标+257,窗口左上角y坐标+139, 窗口左上角x坐标+308,窗口左上角y坐标+164,"Attachment:\验证码.bmp",0.9,intX,intY
  2. If intX > 0 And intY > 0 Then
  3. //
  4. End If
复制代码
有些游戏的验证窗口出现的位置是随机的
这种情况,只能将找图范围设置为窗口客户区大小去找图。
观察验证窗口的随机位置,没有被随机到的位置尽量排除在找图范围外,找图范围越小效率越高



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

您所在的用户组无法下载或查看附件


[backcolor=rgb(247, 247, 247)][backcolor=rgb(255, 255, 255)]验证码位置计算与NO.2中找"验证码"文字图片的计法是一样的。
您所在的用户组无法下载或查看附件


[backcolor=rgb(247, 247, 247)][backcolor=rgb(255, 255, 255)]使用图像插件中 PrintScreen 命令截图保存验证码。
  1. Call Plugin.Pic.PrintScreen(窗口左上角x坐标 + 310, 窗口左上角y坐标 + 233, 窗口左上角x坐标 + 430, 窗口左上角y坐标 + 278, "F:\验证码.bmp")
复制代码

NO.4-使用361度窗口插件,将保存的验证码显示到InputBox窗口上


361度插件下载:
您所在的用户组无法下载或查看附件

解压之后,将里面的dll文件剪切,黏贴到按键安装目录下的 plugin文件夹中即可。
我们用到的361度插件命令有三个:

CreatePictureRgn (创建图像显示区域 )
SetPictureRgnImage (设置图像显示区域里显示的图像)
SetPictureRgnStyle (设置图像显示区域样式)


显示验证码流程:
1、启动线程获取inputBox窗口句柄。
2、弹出InputBox窗口。
3、使用361度插件图像显示命令,在inputbox窗口上显示图像。
* inputbox是一个阻断命令,弹出inputBox窗口之后,余下的代码要等关闭了inputbox窗口才会继续进行。所以需要先启用线程等候着,等待inputbox窗口出现之后,获取inputbox窗口句柄。


在InputBox窗口上显示图片源码:
源码作者:[backcolor=rgb(229, 237, 242)]118184017
  1. jieguo = 弹出输入验证码框("F:\验证码.bmp", 0, 0, 100, 100)
  2. Global 图片路径,x1,y1,xx1,yy1 //局部变量的值不支持线程传递,需要定义全局变量
  3. Function 弹出输入验证码框(图片地址,x,y,xx,yy)
  4. 图片路径=图片地址:x1=x:y1=y:xx1=xx:yy1=yy
  5. 线程ID=BeginThread(线程) //启动线程等待获取inputbox窗口句柄
  6. 弹出输入验证码框=InputBox("","请输入验证码")
  7. StopThread 线程ID
  8. End Function
  9. Sub 线程()
  10. do
  11. Hwnd = Plugin.Window.Find("#32770", "请输入验证码")
  12. Loop while (Hwnd=0) //循环找InputBox窗口句柄,找到则退出循环,继续后续操作
  13. Hwnd = Plugin.Window.FindEx(Hwnd, 0, "Static", "") // 图片不能在输入框、命令按钮上显示,所以需要找类名为static的InputBox的子窗口,作为显示图片的对象
  14. call 在窗口上贴图(Hwnd,图片路径,x1,y1,xx1,yy1,3) //调用贴图的子程序
  15. End Sub
  16. Sub 在窗口上贴图(句柄,图片地址,x,y,xx,yy,显示方式)
  17. //显示方式为1 是拉伸,显示方式为3 是原大小
  18. 图像句柄=Plugin.WndEx6.CreatePictureRgn (句柄,x,y,xx,yy) //建立一个用于显示图片的区域
  19. call Plugin.WndEx6.SetPictureRgnStyle (图像句柄,显示方式)//设置图片显示的方式
  20. do
  21. call Plugin.WndEx6.SetPictureRgnImage (图像句柄,图片地址) //设置显示图片区域里要显示的图片
  22. Delay 50
  23. Loop
  24. End Sub
复制代码
整体代码:
  1. hwnd = Plugin.Window.MousePoint()
  2. sText = Plugin.Window.GetText(Hwnd) //获取窗口标题
  3. If sText = "轩辕传奇.jpg - Windows 照片查看器" Then //判断下是不是要操作的窗口
  4. Call Plugin.Window.size(hwnd, 800, 600)
  5. Else
  6. MessageBox "鼠标没有指向游戏窗口"
  7. EndScript
  8. End If

  9. sRect = Plugin.Window.GetClientRect(Hwnd) //获取窗口客户区大小
  10. MyArray = Split(sRect, "|")
  11. 窗口左上角x坐标 = Clng(MyArray(0)) : 窗口左上角y坐标 = Clng(MyArray(1))//获取窗口左上角坐标

  12. FindPic 窗口左上角x坐标+257,窗口左上角y坐标+139, 窗口左上角x坐标+308,窗口左上角y坐标+164,"Attachment:\验证码.bmp",0.9,intX,intY
  13. If intX > 0 And intY > 0 Then
  14. Call Plugin.Pic.PrintScreen(窗口左上角x坐标 + 310, 窗口左上角y坐标 + 233, 窗口左上角x坐标 + 430, 窗口左上角y坐标 + 278, "F:\验证码.bmp")
  15. jieguo = 弹出输入验证码框("F:\验证码.bmp", 0, 0, 100, 100)
  16. End If

  17. Global 图片路径,x1,y1,xx1,yy1
  18. Function 弹出输入验证码框(图片地址,x,y,xx,yy)
  19. 图片路径=图片地址:x1=x:y1=y:xx1=xx:yy1=yy
  20. 线程ID=BeginThread(线程)
  21. 弹出输入验证码框=InputBox("","请输入验证码")
  22. StopThread 线程ID
  23. End Function
  24. Sub 线程()
  25. do
  26. Hwnd = Plugin.Window.Find("#32770", "请输入验证码")
  27. Loop while (Hwnd=0)
  28. Hwnd= Plugin.Window.FindEx(Hwnd, 0,"Static","")
  29. call 在窗口上贴图(Hwnd,图片路径,x1,y1,xx1,yy1,2)
  30. End Sub
  31. Sub 在窗口上贴图(句柄,图片地址,x,y,xx,yy,显示方式)
  32. //显示方式为1 是拉伸,显示方式为3 是原大小
  33. 图像句柄=Plugin.WndEx6.CreatePictureRgn (句柄,x,y,xx,yy)
  34. call Plugin.WndEx6.SetPictureRgnStyle (图像句柄,显示方式)
  35. do
  36. call Plugin.WndEx6.SetPictureRgnImage (图像句柄,图片地址)
  37. Delay 50
  38. Loop
  39. End Sub
复制代码





本文按键学院提供技术支持

━═━═━━═━═━━═━═━◥◤━═━═━━═━═━━═━═━


2个月学会赚大钱的脚本

按键学院实战班


    已有2评分我要评分查看所有评分

    本主题由 超级版主 瑞祥幽冥狼 于 2022/4/27 11:30:10 执行 审核帖子 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    201411期】如何使用InputBox窗口处理验证

    3#

    来学习的

    4#


    5#

    6666666666666666

    6#

    如何使用InputBox窗口处理验证码

    7#

    1234123

    8#

    看看吧

    9#


    10#

    516654

    11#

    的人体有好多人同行业的太阳花

    12#

    111111111111

    13#

    前来学习

    14#

    如何使用InputBox窗口处理验证码修改

    15#

    你真是好讨厌哦,还要回复才能看

    16#

    如何使用InputBox窗口处理验证码修改

    效果图www.xgtzz.com
    17#

    谢谢分享,学习中

    18#

    fasdghhfhfhf

    19#

    ddddddddddddddd

    20#

    滴答滴答滴答滴答滴答滴答滴答滴答滴

    发新话题 回复该主题