XP自动扫雷

2021-02-21  本文已影响0人  buyucoder

很老很老的代码,按键精灵使用的代码,做个存档

 //↓自定义扫雷速度
UserVar speed=DropList{"快速":0|"中速":1|"慢速":50}=1 "扫雷速度"
Dim WinmineHwnd
 //下面这句是遍历符合窗口标题("扫雷")的句柄保存到 WinmineHwnd 里
// Search 返回的信息是一个字符串, 格式如:33123|44356|20055|
 WinmineHwnd = Plugin.Window.Search("扫雷")
 //↓下面这句按“|”对上面的字符串进行分割,将找到的所有窗口句柄分成若干个字符串并保存到数组 MyArray 里面
MyArray = Split(WinmineHwnd, "|")
 //≡≡≡≡≡≡≡≡≡≡≡Split()函数说明≡≡≡≡≡≡≡≡≡≡≡
 // 假设 WinmineHwnd 的值为字串33123|44356|20055|
 // Split进行分割后, MyArray数组中的数组如下:
 // MyArray(0) = "33123"  <---第一窗口的句柄
// MyArray(1) = "44356"  <---第二窗口的句柄
// MyArray(2) = "20055"  <---第三窗口的句柄
// MyArray(3) = ""      <---第四窗口的句柄(说明只找到3个符合条件的窗口)
 //注意:① 数组的第一个元素, 读取的时候是 MyArray(0), 而不是 MyArray(1),
//即数组元素的下标是从 0 开始, 而不是从 1 开始的。
//② Search 返回的字符串尾部总是"|",所以数组的最后一个元素一定是空字串"",
 //即当使用 CLng() 函数来转换上面的MyArray(3)时将会出现“类型不匹配”错误
//≡≡≡≡≡≡≡≡≡≡Split()函数说明结束≡≡≡≡≡≡≡≡≡≡

 If UBound(MyArray)>=0 Then    
     For i=0 To UBound(MyArray)-1
         //下面这句将关闭扫雷程序(这步是为了避免重复破解而失败)
        Call Plugin.Window.CloseEx(CLng(MyArray(i)))      
     Next 
 End If
 //下面这句运行扫雷程序并延时500毫秒
Call RunApp("winmine.exe")
 Delay 500
 //↓再次查找标题为“扫雷”的窗口,窗口句柄保存为WinmineHwnd
 WinmineHwnd = Plugin.Window.Find(0,"扫雷")
 //↓如果查找不到标题为“扫雷”的窗口,则提示运行失败,否则进行破解并排雷
If WinmineHwnd = 0 Then
     MessageBox "扫雷程序运行失败!"
Else
     //↓获取扫雷窗口大小,GetWindowRect 返回的信息是一个字符串, 格式如:123|356|200|400
     Dim WinmineRect
     WinmineRect = Plugin.Window.GetWindowRect(WinmineHwnd)
     //↓按“|”对上面的字符串进行分割, 并保存到数组 RectArray 里面
    Dim RectArray
     RectArray = Split(WinmineRect,"|")
     
     //现在按键8.0版已经支持中文变量名,所以窗口边框坐标可以如下定义
    窗口左边 = RectArray(0)
     窗口上边 = RectArray(1)
     窗口右边 = RectArray(2)
     窗口下边 = RectArray(3)
    
     //↓判断XP主题,根据扫雷窗口边框颜色来判断
    // 只能识别经典主题和默认主题
    // 当系统使用其它主题时,扫雷可能不准确
    IfColor 窗口左边,窗口上边+30,"DA3407",0 Then
         XP主题 = "默认"
     Else
         IfColor 窗口左边,窗口上边+30,"C8D0D4",0 Then
             XP主题 = "经典"
         Else
             XP主题 = "不能识别的XP主题!"
             温馨提示 = MsgBox("你的系统主题不是默认或经典,扫雷可能不准确。" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "你确定要继续尝试扫雷吗?",vbYesNo,XP主题)
             If 温馨提示 = 6 Then
                 XP主题 = "默认"
             Else
                 //↓关闭扫雷窗口
                Call Plugin.Window.CloseEx(WinmineHwnd)
                 //↓结束程序
                Goto 结束程序
            End If
         End If
     End If
     
     //↓计算雷区第一格的坐标
    If XP主题 = "默认" Then
         x1=窗口左边+23
         y1=窗口上边+112
     Else
         x1=窗口左边+23
         y1=窗口上边+103
     End If
     
     //↓计算雷区横格总数,小雷格子是16×16的
    横格总数 = Int((窗口右边-x1)/16)
     //↓计算雷区竖格总数,Int() 是取整函数
    竖格总数 = Int((窗口下边-y1)/16)
     
     //↓扫雷窗口置前
    Call Plugin.Window.Top(WinmineHwnd, 0)
     
     //↓破解扫雷窗口
    Call 破解扫雷程序()
     
     //↓锁定鼠标
    LockMouse
     //↓记下鼠标位置以便稍后回到原处
    SaveMousePos
     //↓用鼠标扫描整个雷区
    i=0
     While i<竖格总数
        j=0
         y=y1+i*16
         While j<横格总数
            x=x1+j*16
             
             //↓先判断当前这格是否已经点开,
            //↓未点开的小雷格子是立体的,
            //↓即格子的左边缘(和上边缘)是白色的            
             IfColor x-7,y,"FFFFFF",0
                 //↓移动鼠标到这个未点开的格子上
                MoveTo x,y
                 //↓延时speed毫秒,(变量speed是个用户自定义变量)
                 Delay speed
                 //↓如果屏幕左上方的像素为白色,说明不是雷,单击左键
                IfColor 0,0,"FFFFFF",0 
                     //↓注意这里不是用普通的单击左键,而是用了Bkgnd后台插件的单击左键
                    Call Plugin.Bkgnd.LeftClick(WinmineHwnd, x-窗口左边, y-(y1-64))
                 Else
                     //↓如果屏幕左上方的像素为黑色,说明是雷,单击右键标记(其实可以不标记)
                    IfColor 0,0,"000000",0
                         Call Plugin.Bkgnd.RightClick(WinmineHwnd, x-窗口左边, y-(y1-64))
                     Else
                         //↓屏幕左上方的像素不是白色也不是黑色,说明破解没有成功
                        MessageBox "抱歉,扫雷程序没有破解成功,程序即将终止!" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "请再尝试一两次,实在不行请联系QQ:82199975"
                         //↓关闭扫雷窗口
                        Call Plugin.Window.CloseEx(WinmineHwnd)
                         //↓结束程序
                        Goto 结束程序
                    End If 
                 End If 
             End If 
             j=j+1
         WEnd 
         i=i+1
     WEnd
     //↓取消鼠标锁定
    UnlockMouse
     //↓取消扫雷窗口置前
    Call Plugin.Window.Top(WinmineHwnd, 1)
     //↓鼠标回到原处
    RestoreMousePos
 End If
 ////↓脚本停止运行
Rem 结束程序
EndScript
 //↓以下是子程序
Sub 破解扫雷程序()
//↓激活扫雷窗口
    Call Plugin.Window.Active(WinmineHwnd)
     //↓更改窗口标题
    Select Case speed
     Case 0
         WinmineTitle = "扫雷-快速模式"
     Case 1
         WinmineTitle = "扫雷-中速模式"
     Case 50
         WinmineTitle = "扫雷-慢速模式"
     End Select
     Call Plugin.Window.SetText(WinmineHwnd,WinmineTitle)
     //↓连续按下键盘上X、Y、Z、Z、Y、Shift来破解扫雷程序
    //做完这一动作后鼠标所指的格子如果是雷,则屏幕最左上角的像素为黑色,否则为白色
    //请不要问我为什么会这样,因为我也不知道
    KeyPress "X", 1
     KeyPress "Y", 1
     KeyPress "Z", 1
     KeyPress "Z", 1
     KeyPress "Y", 1
     KeyPress "Shift", 1
 End Sub
上一篇下一篇

猜你喜欢

热点阅读