当前位置:   article > 正文

开发中的自动化——按键精灵&AutoIt_按键精灵 automation错误

按键精灵 automation错误

游戏开发中经常需要发布版本给策划测试,可以用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照着写了个。

  1. [General]
  2. SyntaxVersion=2
  3. BeginHotkey=121
  4. BeginHotkeyMod=0
  5. PauseHotkey=0
  6. PauseHotkeyMod=0
  7. StopHotkey=123
  8. StopHotkeyMod=0
  9. RunOnce=1
  10. EnableWindow=
  11. MacroID=f3353dc6-1d9e-4d6d-abb5-77b2fcda5516
  12. Description=同步到test
  13. Enable=1
  14. AutoRun=0
  15. [Repeat]
  16. Type=0
  17. Number=1
  18. [SetupUI]
  19. Type=2
  20. QUI=
  21. [Relative]
  22. SetupOCXFile=
  23. [Comment]
  24. 【功能说明】
  25. 发布程序时一键操作让flash builder发布版本,然后同步到test目录
  26. 【使用说明】
  27. 先把flash builder和Beyond Compare开启,然后运行等待完成就可以提交了
  28. [Script]
  29. Call 构建发布版()
  30. Call test同步()
  31. MessageBox "同步test完成"
  32. /
  33. //构建发布版
  34. Sub 构建发布版()
  35. HwndEx = Plugin.Window.Search("Flash Builder")
  36. MyArray = Split(HwndEx, "|")
  37. If UBound(MyArray)>=0 Then
  38. Hwnd = Clng(MyArray(0))
  39. Call Plugin.Window.Max(Hwnd)
  40. Delay 100
  41. Call Plugin.Window.Active(Hwnd)
  42. Delay 100
  43. sRect = Plugin.Window.GetClientRect(Hwnd)
  44. MyArray = Split(sRect, "|")
  45. W1 = Clng(MyArray(0)) : H1 = Clng(MyArray(1))
  46. // MsgBox "边框大小: " & W1 & " " & H1
  47. //选择导出
  48. MoveTo W1+385, H1+15
  49. Delay 100
  50. LeftClick 1
  51. Delay 100
  52. //开始导出
  53. Do While True
  54. DochuHwnd = Plugin.Window.Foreground()
  55. If DochuHwnd <> Hwnd Then
  56. Delay 500
  57. Exit Do
  58. End If
  59. Delay 100
  60. Loop
  61. // sText = Plugin.Window.GetText(DochuHwnd)
  62. // MsgBox sText
  63. sRect = Plugin.Window.GetClientRect(DochuHwnd)
  64. MyArray = Split(sRect, "|")
  65. DochuW1 = Clng(MyArray(0)) : DochuH1 = Clng(MyArray(1))
  66. // MsgBox "边框大小:" & DochuW1 & "," & DochuH1
  67. MoveTo DochuW1+475, DochuH1+630
  68. Delay 100
  69. LeftClick 1
  70. Delay 100
  71. //检测导出是否完成
  72. Do While True
  73. WanchengHwnd = Plugin.Window.Foreground()
  74. If WanchengHwnd <> DochuHwnd Then
  75. Delay 500
  76. Exit Do
  77. End If
  78. Delay 100
  79. Loop
  80. sRect = Plugin.Window.GetClientRect(WanchengHwnd)
  81. MyArray = Split(sRect, "|")
  82. WanchengW1 = Clng(MyArray(0)) : WanchengH1 = Clng(MyArray(1))
  83. // MsgBox "边框大小:" & WanchengW1 & "," & WanchengH1
  84. MoveTo WanchengW1+372, WanchengH1+134
  85. Delay 500
  86. LeftClick 1
  87. Delay 100
  88. Else
  89. Msgbox "未启动flash builder"
  90. EndScript
  91. End If
  92. End Sub
  93. //同步文件夹
  94. Sub 同步文件夹()
  95. Delay 100
  96. //等待进入同步界面选择同步
  97. Do While True
  98. GetColor = GetPixelColor(W1 + 19, H1 + 41)
  99. //MsgBox W1 & H1 & GetColor
  100. If GetColor = "40D0FF" Then
  101. Delay 500
  102. Exit Do
  103. End If
  104. Delay 100
  105. Loop
  106. //MsgBox "开始同步"
  107. //等待对比同步完成
  108. Do While True
  109. GetColor=GetPixelColor(W1+22, H1+308)
  110. If GetColor <> "2B53FD" Then
  111. Delay 500
  112. Exit Do
  113. End If
  114. Delay 100
  115. Loop
  116. // MsgBox "对比完成"
  117. //判断是否需要同步
  118. GetColor = GetPixelColor(W1 + 1267, H1 + 347)
  119. If GetColor = "2BBF6D" Then
  120. Delay 500
  121. //点击同步
  122. MoveTo W1 + 1267, H1 + 347
  123. Delay 100
  124. LeftClick 1
  125. Delay 100
  126. //等待同步完成
  127. Do While True
  128. GetColor=GetPixelColor(W1+15, H1+462)
  129. If GetColor = "82DAF4" Then
  130. Delay 500
  131. //MsgBox "同步完成"
  132. Exit Do
  133. End If
  134. Delay 100
  135. Loop
  136. End If
  137. Delay 100
  138. //返回
  139. MoveTo W1+19, H1+41
  140. Delay 100
  141. LeftClick 1
  142. Delay 100
  143. End Sub
  144. Sub test同步()
  145. //对文件进行拷贝
  146. HwndEx = Plugin.Window.Search("Beyond Compare")
  147. MyArray = Split(HwndEx, "|")
  148. If UBound(MyArray)>=0 Then
  149. Hwnd = Clng(MyArray(0))
  150. Call Plugin.Window.Max(Hwnd)
  151. Delay 100
  152. Call Plugin.Window.Active(Hwnd)
  153. Delay 100
  154. // sRect = Plugin.Window.GetWindowRect(Hwnd)
  155. sRect = Plugin.Window.GetClientRect(Hwnd)
  156. MyArray = Split(sRect, "|")
  157. W1 = Clng(MyArray(0)) : H1 = Clng(MyArray(1))
  158. //确保在最开始界面返回
  159. MoveTo W1+19, H1+41
  160. Delay 100
  161. LeftClick 1
  162. Delay 100
  163. //同步test程序
  164. MoveTo W1+367, H1+444
  165. Delay 100
  166. LeftClick 1
  167. Delay 20
  168. LeftClick 1
  169. Delay 100
  170. Call 同步文件夹()
  171. //同步test资源
  172. MoveTo W1+354, H1+427
  173. Delay 100
  174. LeftClick 1
  175. Delay 20
  176. LeftClick 1
  177. Delay 100
  178. Call 同步文件夹()
  179. Else
  180. Msgbox "未启动Beyond Compare"
  181. EndScript
  182. End If
  183. End Sub

 

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

  1. ;同步到test
  2. BuildRelease()
  3. SyncTest()
  4. MsgBox(0,"提示","同步test完成")
  5. ;构建发行版本
  6. Func BuildRelease()
  7. Local $hwnd = WinGetHandle("[REGEXPTITLE:[\s\S]+Flash Builder]")
  8. ;MsgBox(0, "Details", WinGetTitle($hwnd))
  9. If $hwnd <> "" Then
  10. WinSetState($hwnd, "", @SW_MAXIMIZE)
  11. Sleep(100)
  12. WinActivate($hwnd)
  13. Sleep(100)
  14. Local $size = WinGetPos($hwnd)
  15. ;MsgBox(0, "Active window stats (x,y,width,height):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])
  16. Local $x=$size[0]
  17. Local $y=$size[1]
  18. ;选择导出
  19. MouseMove($x+396, $y+65,5)
  20. Sleep(100)
  21. MouseClick("left")
  22. Sleep(100)
  23. ;开始导出
  24. WinWaitActive("导出发行版")
  25. $hwnd = WinGetHandle("导出发行版")
  26. ;//MsgBox(0,"句柄",$hwnd)
  27. $size = WinGetPos($hwnd)
  28. $x=$size[0]
  29. $y=$size[1]
  30. MouseMove($x+473, $y+659,5)
  31. Sleep(100)
  32. MouseClick("left")
  33. ;检测导出是否完成
  34. WinWaitNotActive($hwnd)
  35. Local $wanchen = WinGetHandle("导出发行版")
  36. ;//MsgBox(0,"句柄",$wanchen)
  37. $size = WinGetPos($wanchen)
  38. $x=$size[0]
  39. $y=$size[1]
  40. MouseMove($x+374, $y+167,5)
  41. Sleep(100)
  42. MouseClick("left")
  43. Sleep(500)
  44. Else
  45. MsgBox(0,"错误","未启动flash builder")
  46. Exit
  47. EndIf
  48. EndFunc
  49. ;同步文件夹
  50. Func SyncDir($x,$y,$hwnd)
  51. ;//等待进入同步界面选择同步
  52. Do
  53. Sleep(100)
  54. Local $Color=PixelGetColor($x+27, $y+71,$hwnd)
  55. ;MsgBox(0,"color",Hex($Color,6))
  56. Until $Color==0xffd040
  57. ;//等待对比同步完成
  58. Sleep(500)
  59. Do
  60. Sleep(100)
  61. $Color=PixelGetColor($x+30, $y+338,$hwnd)
  62. Until $Color<>0xfd532b
  63. ;//判断是否需要同步
  64. Sleep(500)
  65. $Color=PixelGetColor($x+1275, $y+377,$hwnd)
  66. If $Color==0x6dbf2b Then
  67. ;//点击同步
  68. MouseMove($x+1275, $y+377,5)
  69. Sleep(100)
  70. MouseClick("left")
  71. Sleep(500)
  72. ;//等待同步完成
  73. Do
  74. Sleep(100)
  75. $Color=PixelGetColor($x+23, $y+492,$hwnd)
  76. Until $Color==0xf4da82
  77. EndIf
  78. ;//返回
  79. MouseMove($x+27, $y+71,5)
  80. Sleep(100)
  81. MouseClick("left")
  82. Sleep(100)
  83. EndFunc
  84. ;test同步
  85. Func SyncTest()
  86. Local $hwnd = WinGetHandle("[REGEXPTITLE:[\s\S]+Beyond Compare]")
  87. ;MsgBox(0, "Details", WinGetTitle($hwnd))
  88. If $hwnd <> "" Then
  89. WinSetState($hwnd, "", @SW_MAXIMIZE)
  90. Sleep(100)
  91. WinActivate($hwnd)
  92. Sleep(100)
  93. Local $size = WinGetPos($hwnd)
  94. ;MsgBox(0, "Active window stats (x,y,width,height):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])
  95. Local $x=$size[0]
  96. Local $y=$size[1]
  97. ;//确保在最开始界面返回
  98. MouseMove($x+27, $y+71,0)
  99. Sleep(100)
  100. MouseClick("left")
  101. Sleep(100)
  102. ;//同步test程序
  103. MouseMove($x+375, $y+474)
  104. Sleep(100)
  105. MouseClick("left")
  106. Sleep(20)
  107. MouseClick("left")
  108. Sleep(100)
  109. SyncDir($x,$y,$hwnd)
  110. ;//同步test资源
  111. MouseMove($x+362, $y+457)
  112. Sleep(100)
  113. MouseClick("left")
  114. Sleep(20)
  115. MouseClick("left")
  116. Sleep(100)
  117. SyncDir($x,$y,$hwnd)
  118. Else
  119. MsgBox(0,"错误","未启动Beyond Compare")
  120. Exit
  121. EndIf
  122. EndFunc

 

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/582496
推荐阅读
相关标签
  

闽ICP备14008679号