很老很老的代码,按键精灵使用的代码,做个存档
//↓自定义扫雷速度
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
网友评论