AutoIT:界面与自动化操作结合来简化日常劳动: .Net Reactor验证License,设置License,创建License,截图AutoIt自动化实现。(三)

最近频繁的用到上面的代码,我经过仔细思考之后,对代码进行了优化,如下:

1)每个打印前面加入时间戳,防止调试的时候什么都看不出来;

2) 加入了错误验证,防止窗口弹出失败,验证无法成功,应用程序就挂在哪儿了。

AutoIT:界面与自动化操作结合来简化日常劳动: .Net Reactor验证License,设置License,创建License,截图AutoIt自动化实现。(三)

#include <ScreenCapture.au3>
#include <GuiConstantsEx.au3>
Opt("WinTitleMatchMode")

;区域截图
Func screen_capture($path)
    if FileExists($path)= 0 or StringInStr($path,"")=0 Then
        MsgBox(0, "Path Error", "Please input correct Path info!")
    Else
        $handle = WinGetHandle(".NET Reactor v4.5.9.8 - Full Version")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Screen capture win handle: " & $handle & @CRLF)
        WinActivate($handle)
        $control = ControlGetHandle($handle,"","[Name:groupBox6]")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Screen capture Control handle: " & $control & @CRLF)
        ;_ScreenCapture_Capture("D:abc.jpg", 350,290,900,420)
        _ScreenCapture_CaptureWnd($path & "AutoIt.jpg", $control)
    EndIf
EndFunc

;设置 Hardware ID
Func set_hardwareID($hardware_id, $date)
    if StringLen($hardware_id) <> 24 or StringInStr($date,"201")=0 or StringLen($date)<8 Then
        MsgBox(0, "Create license error", "Please input correct License create info!")
    Else
        $handle = WinGetHandle(".NET Reactor v4.5.9.8 - Full Version")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Set hardware ID Window handle: " & $handle & @CRLF)
        WinActivate($handle)
        ControlFocus($handle,"","[Name:button7]")
        SendKeepActive($handle)
        ControlSend($handle,"","", "{tab}")
        $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
        While $text <> "False"
            ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& $text & @CRLF)
            ControlSend($handle,"","", "{UP}")
            $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
        WEnd
        ControlSend($handle,"","", "{Down 2}{Enter}{Down 2}")
        ControlSetText($handle,"", "[Class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1; Text:False]",$date)
        ControlSend($handle,"","", "{up 2}{enter}{down}{enter}{down 2}")
        ControlSetText($handle,"", "[Class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1; Text:False]",$hardware_id)
        ControlSend($handle,"","", "{up 2}{enter}")
    EndIf
EndFunc

;保存 License
Func save_license($path)
    if FileExists($path)= 0 or StringInStr($path,"")=0 Then
        MsgBox(0, "Path Error", "Please input correct Path info!")
    Else
        $handle = WinGetHandle(".NET Reactor v4.5.9.8 - Full Version")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Save License win handle: " & $handle & @CRLF)
        WinActivate($handle)

        $control_handle = ControlGetHandle($handle,"","[Name:button1]")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Save License Create License button: " & $handle & @CRLF)
        ControlClick($handle,"",$control_handle)

        $check = WinWaitActive("Save License As..")
        if $check = 0 Then
            ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " " & "Save License As pop up window failed" & @CRLF)
            Return 0
        EndIf
        $save_window_handle = WinGetHandle("Save License As..")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Save License popup window handle: " & $save_window_handle & @CRLF)

        $save_input_control = ControlGetHandle($save_window_handle,"","Edit1")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Save License input field handle: " & $save_input_control & @CRLF)

        ControlSetText($save_window_handle,"",$save_input_control,$path & "SageTouch.License")
        $save_button_handle = ControlGetHandle($save_window_handle,"","Button1")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Save License Save button: " & $save_button_handle & @CRLF)

        ControlClick($save_window_handle,"",$save_button_handle)
        if WinWait("确认另存为","",1)<>0 Then
            $popup_handle = WinGetHandle("确认另存为")
            WinWaitActive($popup_handle)
            ControlClick($popup_handle,"", "Button1")
        EndIf
    EndIf
    ;获取窗口句柄
EndFunc

;检查 License 是否是正确的
Func exam_license($path)
    If FileExists($path & "SageTouch.License")=0 or StringInStr($path,"")=0 Then
        MsgBox(0, "Exam license","Can not find license to exam")
    Else
        $handle = WinGetHandle(".NET Reactor v4.5.9.8 - Full Version")
        WinActivate($handle)
        ControlSend($handle, "","","{ALT}{T}{Down}{Enter}")
        ;ControlSend($handle, "", "","{DOWN}{Enter}")

        $check = WinWaitActive("License Examiner", "", 5)
        if $check = 0 Then
            ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " " & "License Examiner pop up window failed" & @CRLF)
            Return 0
        EndIf
        $license_exam_handle = WinGetHandle("License Examiner")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "License examiner window handle: " & $license_exam_handle & @CRLF)

        $open_license_handle = ControlGetHandle($license_exam_handle,"","[Name:button2]")
        ConsoleWrite("Open License button handle: "&$open_license_handle & @CRLF)
        ControlClick($license_exam_handle,"",$open_license_handle)

        $check = WinWaitActive("Please Select License File", "", 5)
        if $check = 0 Then
            ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " " & "Select License File pop up window failed" & @CRLF)
            Return 0
        EndIf

        $select_license_handle = WinGetHandle("Please Select License File")
        ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & " "& "Select License File window handle: " & $select_license_handle & @CRLF)

        $select_license_input_handle = ControlGetHandle($select_license_handle,"","Edit1")
        $open_button_handle = ControlGetHandle($select_license_handle,"","Button1")
        ControlSetText($select_license_handle,"",$select_license_input_handle,$path & "SageTouch.License")
        ControlClick($select_license_handle,"",$open_button_handle)
    EndIf
EndFunc

;Create a new GUI
GUICreate("Create License", 700, 300)

GUICtrlCreateLabel("Hardware ID", 30, 30, 250, 20)
$hardware_id = GUICtrlCreateInput("33DD-8F20-FA26-7E2A-CDE6", 30, 50, 250, 20)

GUICtrlCreateLabel("Expire Date", 300, 30, 200, 20)
$date = GUICtrlCreateInput("2013-10-1", 300, 50, 200, 20)


GUICtrlCreateLabel("License File Path", 30, 100, 120, 20)
$path = GUICtrlCreateInput("", 30, 120, 470, 20)

$exam_License = GUICtrlCreateButton("Exam License", 30, 170, 120, 20)
$Create_License = GUICtrlCreateButton("Create License", 180, 170, 120, 20)
$Save_License = GUICtrlCreateButton("Save License", 330, 170, 120, 20)
$Screen_Capture = GUICtrlCreateButton("Screen Capture", 480, 170, 120, 20)

GUISetState()
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $Create_License
            set_hardwareID(GUICtrlRead($hardware_id), GUICtrlRead($date))
        Case $msg = $Screen_Capture
            screen_capture(GUICtrlRead($path))
        Case $msg = $Save_License
            save_license(GUICtrlRead($path))
        Case $msg = $exam_License
            exam_license(GUICtrlRead($path))
    EndSelect
Wend
AutoIT:界面与自动化操作结合来简化日常劳动: .Net Reactor验证License,设置License,创建License,截图AutoIt自动化实现。(三)