rictirse 發表於 2012-9-23 17:48

Micro Duo教室之AutoIt 自動安裝開班授課 第三課

本帖最後由 rictirse 於 2012-11-5 23:45 編輯

學完第二課的你,應該算是一個可以自己撰寫一個相當效率的自動安裝程序了

但是噹噹還有隱藏的一手,只有在Micro Duo 才能看到的自動安裝手段

不僅效能相當高,準確率又比ControlClick高出不少,就是用噹噹自己寫的UDF(user defined function)

首先將下面三個func 貼到AutoIt Script 最下面Func _WinWaitClick ( $Title, $Text, $ControlID, $Sleep = 0)
      WinWait ( $Title, $Text)
      $handle = WinGetHandle ( $Title, $Text)
      Do
                ControlClick( $handle, "", $ControlID)
                Sleep ($Sleep)
      Until WinGetHandle ( $Title, $Text) <> $handle
EndFunc

Func _WinWaitCheck ( $Title, $Text, $ControlID, $Sleep = 0)
      WinWait ( $Title, $Text)
      $handle = WinGetHandle ( $Title, $Text)
      Do
                ControlCommand( $handle, "", $ControlID, "Check", "")
                Sleep ($Sleep)
      Until ControlCommand( $handle, "", $ControlID, "IsChecked", "")
EndFunc

Func _WinWaitUnCheck ( $Title, $Text, $ControlID, $Sleep = 0)
      WinWait ( $Title, $Text)
      $handle = WinGetHandle ( $Title, $Text)
      Do
                ControlCommand( $handle, "", $ControlID, "UnCheck", "")
                Sleep ($Sleep)
      Until ControlCommand( $handle, "", $ControlID, "IsChecked", "") = 0
EndFunc跟一、二課用一樣的FileZilla_3.5.3_win32 範例

1.開頭一樣使用ShellExecute執行ShellExecute ("FileZilla_3.5.3_win32-setup.exe")
2.改用ControlClick 來達成
_WinWaitClick ( "標題", "文字", 控制項ID ,[延遲時間 預設 0秒])

很簡單的動作就可以換上噹噹的UDF

再把#19列的 ControlCommand ( "FileZilla Client 3.5.3 Setup", "Who should this application be installed for?", "Button5", "Check", "")
置換成
_WinWaitCheck ( "FileZilla Client 3.5.3 Setup", "Who should this application be installed for?", "Button5")與#32列的ControlCommand ( "FileZilla Client 3.5.3 Setup", "FileZilla Client 3.5.3 has been installed on your computer.", "Button4", "UnCheck", "")
置換成
_WinWaitUnCheck ( "FileZilla Client 3.5.3 Setup", "FileZilla Client 3.5.3 has been installed on your computer.", "Button4") 再把全部的WinWaitActive與其引數完全刪除後的Script#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.8.1
Author:      Dang Wang

Script Function: FileZilla_Install
      Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

ShellExecute ("FileZilla_3.5.3_win32-setup.exe")

_WinWaitClick ( "FileZilla Client 3.5.3 Setup", "Please review the license terms before installing FileZilla Client 3.5.3.", "Button2")

_WinWaitCheck ( "FileZilla Client 3.5.3 Setup", "Who should this application be installed for?", "Button5")
_WinWaitClick ( "FileZilla Client 3.5.3 Setup", "Who should this application be installed for?", "Button2")

_WinWaitClick ( "FileZilla Client 3.5.3 Setup", "Choose which features of FileZilla Client 3.5.3 you want to install.", "Button2")

_WinWaitClick ( "FileZilla Client 3.5.3 Setup", "Choose the folder in which to install FileZilla Client 3.5.3.", "Button2")

_WinWaitClick ( "FileZilla Client 3.5.3 Setup", "Choose a Start Menu folder for the FileZilla Client 3.5.3 shortcuts.", "Button2")

_WinWaitUnCheck ("FileZilla Client 3.5.3 Setup", "FileZilla Client 3.5.3 has been installed on your computer.", "Button4")
_WinWaitClick ( "FileZilla Client 3.5.3 Setup", "FileZilla Client 3.5.3 has been installed on your computer.", "Button2")

Func _WinWaitClick ( $Title, $Text, $ControlID, $Sleep = 0)
        WinWait ( $Title, $Text)
        $handle = WinGetHandle ( $Title, $Text)
        Do
                ControlClick( $handle, "", $ControlID)
                Sleep ($Sleep)
        Until WinGetHandle ( $Title, $Text) <> $handle
EndFunc

Func _WinWaitCheck ( $Title, $Text, $ControlID, $Sleep = 0)
        WinWait ( $Title, $Text)
        $handle = WinGetHandle ( $Title, $Text)
        Do
                ControlCommand( $handle, "", $ControlID, "Check", "")
                Sleep ($Sleep)
        Until ControlCommand( $handle, "", $ControlID, "IsChecked", "")
EndFunc

Func _WinWaitUnCheck ( $Title, $Text, $ControlID, $Sleep = 0)
        WinWait ( $Title, $Text)
        $handle = WinGetHandle ( $Title, $Text)
        Do
                ControlCommand( $handle, "", $ControlID, "UnCheck", "")
                Sleep ($Sleep)
        Until ControlCommand( $handle, "", $ControlID, "IsChecked", "") = 0
EndFunc
頁: [1]
查看完整版本: Micro Duo教室之AutoIt 自動安裝開班授課 第三課