美文网首页
XP自动扫雷

XP自动扫雷

作者: buyucoder | 来源:发表于2021-02-21 15:54 被阅读0次

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

     //↓自定义扫雷速度
    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
    

    相关文章

      网友评论

          本文标题:XP自动扫雷

          本文链接:https://www.haomeiwen.com/subject/dvfqfltx.html