admin管理员组

文章数量:1025333

开发中的自动化——按键精灵AutoIt

游戏开发中经常需要发布版本给策划测试,可以用svn或者ftp等来做为文件传输的渠道。

我们这边的流程一般如下:

1、在flash builder构建发布版本。

2、用Beyond Compare(文件对比工具)对比发布目录和策划测试目录里面的程序,并且把新的文件拷贝到测试目录中。

3、对比游戏资源目录和策划测试资源目录,并且把新的资源拷贝过去。

4、提交测试目录到svn。

这其中第1步有3次鼠标操作和等待时间,第2步中有3次鼠标操作和较短等待时间,第3步和第2步鼠标操作一样,但如果资源多的话就要等很久了。

每次都这样点还要等太烦了,一键操作多方便的啊。

 

按键精灵被很多人用来做辅助程序,当然拿来做点自动化的小工具还是不错的选择。2011年的时候同事用按键精灵来处理flash cs做界面处理的重复操作,当时他并没有编写脚本,而是用的录制宏的方式来处理的,实际中让宏循环执行时,还借助了记事本来提供一些数据。

开始接触AutoIt是大概2010年左右,原本想找一个类似shell的脚本,来帮助我在编译动态库生成后拷贝文件后,再提交svn。转换动画文件转换后自动拷贝资源,并且提交svn。但看到autoit语法太麻烦了还是没有弄。

先用按键精灵实现了一个版本,要求flash builder和beyond compare已经启动。如果让脚本来启动程序再操作,感觉太麻烦了,还要配置路径(同事电脑上面路径可能不一样),就手动先让程序都跑起来。在beyond compare中选择文件夹同步时是根据坐标计算的,用文字识别来肯定好些,但是麻烦啊~

这个按键精灵的版本在2个同事电脑上面测试,一个正常一个不正常,估计是电脑计时引起的差异。用按键精灵可以直接用脚本文件跑,不必导出小精灵,导出小精灵还有广告。有广告太烦了,所以又用autoit照着写了个。

[General]
SyntaxVersion=2
BeginHotkey=121
BeginHotkeyMod=0
PauseHotkey=0
PauseHotkeyMod=0
StopHotkey=123
StopHotkeyMod=0
RunOnce=1
EnableWindow=
MacroID=f3353dc6-1d9e-4d6d-abb5-77b2fcda5516
Description=同步到test
Enable=1
AutoRun=0
[Repeat]
Type=0
Number=1
[SetupUI]
Type=2
QUI=
[Relative]
SetupOCXFile=
[Comment]
【功能说明】
发布程序时一键操作让flash builder发布版本,然后同步到test目录
【使用说明】
先把flash builder和Beyond Compare开启,然后运行等待完成就可以提交了[Script]
Call 构建发布版()
Call test同步()
MessageBox "同步test完成"
/
//构建发布版
Sub 构建发布版()HwndEx = Plugin.Window.Search("Flash Builder")MyArray = Split(HwndEx, "|")   If UBound(MyArray)>=0 Then  Hwnd = Clng(MyArray(0))Call Plugin.Window.Max(Hwnd)Delay 100Call Plugin.Window.Active(Hwnd)Delay 100sRect = Plugin.Window.GetClientRect(Hwnd)MyArray = Split(sRect, "|")  W1 = Clng(MyArray(0)) : H1 = Clng(MyArray(1))//    MsgBox "边框大小:       "  &  W1 & "             " & H1 //选择导出MoveTo W1+385, H1+15Delay 100LeftClick 1Delay 100//开始导出Do While TrueDochuHwnd = Plugin.Window.Foreground()If DochuHwnd <> Hwnd Then Delay 500Exit DoEnd IfDelay 100Loop//    sText = Plugin.Window.GetText(DochuHwnd)//    MsgBox sText sRect = Plugin.Window.GetClientRect(DochuHwnd)MyArray = Split(sRect, "|")  DochuW1 = Clng(MyArray(0)) : DochuH1 = Clng(MyArray(1))// MsgBox "边框大小:" & DochuW1 & "," & DochuH1MoveTo DochuW1+475, DochuH1+630Delay 100LeftClick 1Delay 100//检测导出是否完成Do While TrueWanchengHwnd = Plugin.Window.Foreground()If WanchengHwnd <> DochuHwnd Then Delay 500Exit DoEnd IfDelay 100LoopsRect = Plugin.Window.GetClientRect(WanchengHwnd)MyArray = Split(sRect, "|")  WanchengW1 = Clng(MyArray(0)) : WanchengH1 = Clng(MyArray(1))// MsgBox "边框大小:" & WanchengW1 & "," & WanchengH1MoveTo WanchengW1+372, WanchengH1+134Delay 500LeftClick 1Delay 100Else Msgbox "未启动flash builder"EndScriptEnd If   
End Sub
//同步文件夹
Sub 同步文件夹()Delay 100//等待进入同步界面选择同步Do While TrueGetColor = GetPixelColor(W1 + 19, H1 + 41)//MsgBox W1 & H1 & GetColorIf GetColor = "40D0FF" Then Delay 500Exit DoEnd IfDelay 100Loop//MsgBox "开始同步"//等待对比同步完成Do While TrueGetColor=GetPixelColor(W1+22, H1+308)If GetColor <> "2B53FD" Then Delay 500Exit DoEnd IfDelay 100Loop
//    MsgBox "对比完成"//判断是否需要同步GetColor = GetPixelColor(W1 + 1267, H1 + 347)If GetColor = "2BBF6D" Then Delay 500//点击同步MoveTo W1 + 1267, H1 + 347Delay 100LeftClick 1Delay 100//等待同步完成Do While TrueGetColor=GetPixelColor(W1+15, H1+462)If GetColor = "82DAF4" Then Delay 500//MsgBox "同步完成"Exit DoEnd IfDelay 100LoopEnd IfDelay 100//返回MoveTo W1+19, H1+41Delay 100LeftClick 1Delay 100
End Sub
Sub test同步()//对文件进行拷贝HwndEx = Plugin.Window.Search("Beyond Compare")MyArray = Split(HwndEx, "|")   If UBound(MyArray)>=0 Then  Hwnd = Clng(MyArray(0))Call Plugin.Window.Max(Hwnd)Delay 100Call Plugin.Window.Active(Hwnd)Delay 100//    sRect = Plugin.Window.GetWindowRect(Hwnd)sRect = Plugin.Window.GetClientRect(Hwnd)MyArray = Split(sRect, "|")  W1 = Clng(MyArray(0)) : H1 = Clng(MyArray(1))//确保在最开始界面返回MoveTo W1+19, H1+41Delay 100LeftClick 1Delay 100//同步test程序MoveTo W1+367, H1+444Delay 100LeftClick 1Delay 20LeftClick 1Delay 100Call 同步文件夹()//同步test资源MoveTo W1+354, H1+427Delay 100LeftClick 1Delay 20LeftClick 1Delay 100Call 同步文件夹()Else Msgbox "未启动Beyond Compare"EndScriptEnd If
End Sub

 

autoit版本的鼠标移动是有轨迹移动的,不是瞬移,在按键的时候应该会好些。导出一个exe随便哪都可以用了。

;同步到test
BuildRelease()
SyncTest()
MsgBox(0,"提示","同步test完成");构建发行版本
Func BuildRelease()
Local $hwnd = WinGetHandle("[REGEXPTITLE:[\s\S]+Flash Builder]")
;MsgBox(0, "Details", WinGetTitle($hwnd))
If $hwnd <> "" ThenWinSetState($hwnd, "", @SW_MAXIMIZE)Sleep(100)WinActivate($hwnd)Sleep(100)Local $size = WinGetPos($hwnd);MsgBox(0, "Active window stats (x,y,width,height):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])Local $x=$size[0]Local $y=$size[1];选择导出MouseMove($x+396, $y+65,5)Sleep(100)MouseClick("left")Sleep(100);开始导出WinWaitActive("导出发行版")$hwnd = WinGetHandle("导出发行版");//MsgBox(0,"句柄",$hwnd)$size = WinGetPos($hwnd)$x=$size[0]$y=$size[1]MouseMove($x+473, $y+659,5)Sleep(100)MouseClick("left");检测导出是否完成WinWaitNotActive($hwnd)Local $wanchen = WinGetHandle("导出发行版");//MsgBox(0,"句柄",$wanchen)$size = WinGetPos($wanchen)$x=$size[0]$y=$size[1]MouseMove($x+374, $y+167,5)Sleep(100)MouseClick("left")Sleep(500)
ElseMsgBox(0,"错误","未启动flash builder")Exit
EndIf
EndFunc;同步文件夹
Func SyncDir($x,$y,$hwnd);//等待进入同步界面选择同步DoSleep(100)Local $Color=PixelGetColor($x+27, $y+71,$hwnd);MsgBox(0,"color",Hex($Color,6))Until $Color==0xffd040;//等待对比同步完成Sleep(500)DoSleep(100)$Color=PixelGetColor($x+30, $y+338,$hwnd)Until $Color<>0xfd532b;//判断是否需要同步Sleep(500)$Color=PixelGetColor($x+1275, $y+377,$hwnd)If $Color==0x6dbf2b Then;//点击同步MouseMove($x+1275, $y+377,5)Sleep(100)MouseClick("left")Sleep(500);//等待同步完成DoSleep(100)$Color=PixelGetColor($x+23, $y+492,$hwnd)Until $Color==0xf4da82EndIf;//返回MouseMove($x+27, $y+71,5)Sleep(100)MouseClick("left")Sleep(100)
EndFunc;test同步
Func SyncTest()
Local $hwnd = WinGetHandle("[REGEXPTITLE:[\s\S]+Beyond Compare]")
;MsgBox(0, "Details", WinGetTitle($hwnd))
If $hwnd <> "" ThenWinSetState($hwnd, "", @SW_MAXIMIZE)Sleep(100)WinActivate($hwnd)Sleep(100)Local $size = WinGetPos($hwnd);MsgBox(0, "Active window stats (x,y,width,height):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])Local $x=$size[0]Local $y=$size[1];//确保在最开始界面返回MouseMove($x+27, $y+71,0)Sleep(100)MouseClick("left")Sleep(100);//同步test程序MouseMove($x+375, $y+474)Sleep(100)MouseClick("left")Sleep(20)MouseClick("left")Sleep(100)SyncDir($x,$y,$hwnd);//同步test资源MouseMove($x+362, $y+457)Sleep(100)MouseClick("left")Sleep(20)MouseClick("left")Sleep(100)SyncDir($x,$y,$hwnd)
ElseMsgBox(0,"错误","未启动Beyond Compare")Exit
EndIf
EndFunc

 

现在用着速度比人手工快多了。以后再也不用担心发布了~

开发中的自动化——按键精灵AutoIt

游戏开发中经常需要发布版本给策划测试,可以用svn或者ftp等来做为文件传输的渠道。

我们这边的流程一般如下:

1、在flash builder构建发布版本。

2、用Beyond Compare(文件对比工具)对比发布目录和策划测试目录里面的程序,并且把新的文件拷贝到测试目录中。

3、对比游戏资源目录和策划测试资源目录,并且把新的资源拷贝过去。

4、提交测试目录到svn。

这其中第1步有3次鼠标操作和等待时间,第2步中有3次鼠标操作和较短等待时间,第3步和第2步鼠标操作一样,但如果资源多的话就要等很久了。

每次都这样点还要等太烦了,一键操作多方便的啊。

 

按键精灵被很多人用来做辅助程序,当然拿来做点自动化的小工具还是不错的选择。2011年的时候同事用按键精灵来处理flash cs做界面处理的重复操作,当时他并没有编写脚本,而是用的录制宏的方式来处理的,实际中让宏循环执行时,还借助了记事本来提供一些数据。

开始接触AutoIt是大概2010年左右,原本想找一个类似shell的脚本,来帮助我在编译动态库生成后拷贝文件后,再提交svn。转换动画文件转换后自动拷贝资源,并且提交svn。但看到autoit语法太麻烦了还是没有弄。

先用按键精灵实现了一个版本,要求flash builder和beyond compare已经启动。如果让脚本来启动程序再操作,感觉太麻烦了,还要配置路径(同事电脑上面路径可能不一样),就手动先让程序都跑起来。在beyond compare中选择文件夹同步时是根据坐标计算的,用文字识别来肯定好些,但是麻烦啊~

这个按键精灵的版本在2个同事电脑上面测试,一个正常一个不正常,估计是电脑计时引起的差异。用按键精灵可以直接用脚本文件跑,不必导出小精灵,导出小精灵还有广告。有广告太烦了,所以又用autoit照着写了个。

[General]
SyntaxVersion=2
BeginHotkey=121
BeginHotkeyMod=0
PauseHotkey=0
PauseHotkeyMod=0
StopHotkey=123
StopHotkeyMod=0
RunOnce=1
EnableWindow=
MacroID=f3353dc6-1d9e-4d6d-abb5-77b2fcda5516
Description=同步到test
Enable=1
AutoRun=0
[Repeat]
Type=0
Number=1
[SetupUI]
Type=2
QUI=
[Relative]
SetupOCXFile=
[Comment]
【功能说明】
发布程序时一键操作让flash builder发布版本,然后同步到test目录
【使用说明】
先把flash builder和Beyond Compare开启,然后运行等待完成就可以提交了[Script]
Call 构建发布版()
Call test同步()
MessageBox "同步test完成"
/
//构建发布版
Sub 构建发布版()HwndEx = Plugin.Window.Search("Flash Builder")MyArray = Split(HwndEx, "|")   If UBound(MyArray)>=0 Then  Hwnd = Clng(MyArray(0))Call Plugin.Window.Max(Hwnd)Delay 100Call Plugin.Window.Active(Hwnd)Delay 100sRect = Plugin.Window.GetClientRect(Hwnd)MyArray = Split(sRect, "|")  W1 = Clng(MyArray(0)) : H1 = Clng(MyArray(1))//    MsgBox "边框大小:       "  &  W1 & "             " & H1 //选择导出MoveTo W1+385, H1+15Delay 100LeftClick 1Delay 100//开始导出Do While TrueDochuHwnd = Plugin.Window.Foreground()If DochuHwnd <> Hwnd Then Delay 500Exit DoEnd IfDelay 100Loop//    sText = Plugin.Window.GetText(DochuHwnd)//    MsgBox sText sRect = Plugin.Window.GetClientRect(DochuHwnd)MyArray = Split(sRect, "|")  DochuW1 = Clng(MyArray(0)) : DochuH1 = Clng(MyArray(1))// MsgBox "边框大小:" & DochuW1 & "," & DochuH1MoveTo DochuW1+475, DochuH1+630Delay 100LeftClick 1Delay 100//检测导出是否完成Do While TrueWanchengHwnd = Plugin.Window.Foreground()If WanchengHwnd <> DochuHwnd Then Delay 500Exit DoEnd IfDelay 100LoopsRect = Plugin.Window.GetClientRect(WanchengHwnd)MyArray = Split(sRect, "|")  WanchengW1 = Clng(MyArray(0)) : WanchengH1 = Clng(MyArray(1))// MsgBox "边框大小:" & WanchengW1 & "," & WanchengH1MoveTo WanchengW1+372, WanchengH1+134Delay 500LeftClick 1Delay 100Else Msgbox "未启动flash builder"EndScriptEnd If   
End Sub
//同步文件夹
Sub 同步文件夹()Delay 100//等待进入同步界面选择同步Do While TrueGetColor = GetPixelColor(W1 + 19, H1 + 41)//MsgBox W1 & H1 & GetColorIf GetColor = "40D0FF" Then Delay 500Exit DoEnd IfDelay 100Loop//MsgBox "开始同步"//等待对比同步完成Do While TrueGetColor=GetPixelColor(W1+22, H1+308)If GetColor <> "2B53FD" Then Delay 500Exit DoEnd IfDelay 100Loop
//    MsgBox "对比完成"//判断是否需要同步GetColor = GetPixelColor(W1 + 1267, H1 + 347)If GetColor = "2BBF6D" Then Delay 500//点击同步MoveTo W1 + 1267, H1 + 347Delay 100LeftClick 1Delay 100//等待同步完成Do While TrueGetColor=GetPixelColor(W1+15, H1+462)If GetColor = "82DAF4" Then Delay 500//MsgBox "同步完成"Exit DoEnd IfDelay 100LoopEnd IfDelay 100//返回MoveTo W1+19, H1+41Delay 100LeftClick 1Delay 100
End Sub
Sub test同步()//对文件进行拷贝HwndEx = Plugin.Window.Search("Beyond Compare")MyArray = Split(HwndEx, "|")   If UBound(MyArray)>=0 Then  Hwnd = Clng(MyArray(0))Call Plugin.Window.Max(Hwnd)Delay 100Call Plugin.Window.Active(Hwnd)Delay 100//    sRect = Plugin.Window.GetWindowRect(Hwnd)sRect = Plugin.Window.GetClientRect(Hwnd)MyArray = Split(sRect, "|")  W1 = Clng(MyArray(0)) : H1 = Clng(MyArray(1))//确保在最开始界面返回MoveTo W1+19, H1+41Delay 100LeftClick 1Delay 100//同步test程序MoveTo W1+367, H1+444Delay 100LeftClick 1Delay 20LeftClick 1Delay 100Call 同步文件夹()//同步test资源MoveTo W1+354, H1+427Delay 100LeftClick 1Delay 20LeftClick 1Delay 100Call 同步文件夹()Else Msgbox "未启动Beyond Compare"EndScriptEnd If
End Sub

 

autoit版本的鼠标移动是有轨迹移动的,不是瞬移,在按键的时候应该会好些。导出一个exe随便哪都可以用了。

;同步到test
BuildRelease()
SyncTest()
MsgBox(0,"提示","同步test完成");构建发行版本
Func BuildRelease()
Local $hwnd = WinGetHandle("[REGEXPTITLE:[\s\S]+Flash Builder]")
;MsgBox(0, "Details", WinGetTitle($hwnd))
If $hwnd <> "" ThenWinSetState($hwnd, "", @SW_MAXIMIZE)Sleep(100)WinActivate($hwnd)Sleep(100)Local $size = WinGetPos($hwnd);MsgBox(0, "Active window stats (x,y,width,height):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])Local $x=$size[0]Local $y=$size[1];选择导出MouseMove($x+396, $y+65,5)Sleep(100)MouseClick("left")Sleep(100);开始导出WinWaitActive("导出发行版")$hwnd = WinGetHandle("导出发行版");//MsgBox(0,"句柄",$hwnd)$size = WinGetPos($hwnd)$x=$size[0]$y=$size[1]MouseMove($x+473, $y+659,5)Sleep(100)MouseClick("left");检测导出是否完成WinWaitNotActive($hwnd)Local $wanchen = WinGetHandle("导出发行版");//MsgBox(0,"句柄",$wanchen)$size = WinGetPos($wanchen)$x=$size[0]$y=$size[1]MouseMove($x+374, $y+167,5)Sleep(100)MouseClick("left")Sleep(500)
ElseMsgBox(0,"错误","未启动flash builder")Exit
EndIf
EndFunc;同步文件夹
Func SyncDir($x,$y,$hwnd);//等待进入同步界面选择同步DoSleep(100)Local $Color=PixelGetColor($x+27, $y+71,$hwnd);MsgBox(0,"color",Hex($Color,6))Until $Color==0xffd040;//等待对比同步完成Sleep(500)DoSleep(100)$Color=PixelGetColor($x+30, $y+338,$hwnd)Until $Color<>0xfd532b;//判断是否需要同步Sleep(500)$Color=PixelGetColor($x+1275, $y+377,$hwnd)If $Color==0x6dbf2b Then;//点击同步MouseMove($x+1275, $y+377,5)Sleep(100)MouseClick("left")Sleep(500);//等待同步完成DoSleep(100)$Color=PixelGetColor($x+23, $y+492,$hwnd)Until $Color==0xf4da82EndIf;//返回MouseMove($x+27, $y+71,5)Sleep(100)MouseClick("left")Sleep(100)
EndFunc;test同步
Func SyncTest()
Local $hwnd = WinGetHandle("[REGEXPTITLE:[\s\S]+Beyond Compare]")
;MsgBox(0, "Details", WinGetTitle($hwnd))
If $hwnd <> "" ThenWinSetState($hwnd, "", @SW_MAXIMIZE)Sleep(100)WinActivate($hwnd)Sleep(100)Local $size = WinGetPos($hwnd);MsgBox(0, "Active window stats (x,y,width,height):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])Local $x=$size[0]Local $y=$size[1];//确保在最开始界面返回MouseMove($x+27, $y+71,0)Sleep(100)MouseClick("left")Sleep(100);//同步test程序MouseMove($x+375, $y+474)Sleep(100)MouseClick("left")Sleep(20)MouseClick("left")Sleep(100)SyncDir($x,$y,$hwnd);//同步test资源MouseMove($x+362, $y+457)Sleep(100)MouseClick("left")Sleep(20)MouseClick("left")Sleep(100)SyncDir($x,$y,$hwnd)
ElseMsgBox(0,"错误","未启动Beyond Compare")Exit
EndIf
EndFunc

 

现在用着速度比人手工快多了。以后再也不用担心发布了~

本文标签: 开发中的自动化按键精灵AutoIt