zoukankan      html  css  js  c++  java
  • 操作 AutoIT:界面与自动化操作结合来简化日常劳动: .Net Reactor验证License,设置License,创建License,截图AutoIt自动化实现。(六)

    自动化操作的稳定性,便利性虽然已经满足了要求,但是页面上呈现的按钮太多了,可以做的更加简单一些。

    1. 简化页面的按钮,把5个按钮减少至3个,把Display HID按钮功能整合到create license里面;把保存图片按钮功能放到保存License操作中;

    2. 优化输入框。由3个简化为2个,因为HID是固定的,不应该支持手动修改,而expired date默认为当前日期延后2个月,是支持修改的;

    代码如下:

    #include <ScreenCapture.au3>
    #include <GuiConstantsEx.au3>
    #include <date.au3>
    #include <GuiTab.au3>
    #include <GuiEdit.au3>
    
    Opt("WinTitleMatchMode")
    AutoItSetOption("SendKeyDelay")
    AutoItSetOption("WinWaitDelay")
    ;区域截图
    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")
            if $handle="" then return 0
            ConsoleWrite(_Now() & " "& "Screen capture win handle: " & $handle & @CRLF)
            WinActivate($handle)
            $control = ControlGetHandle($handle,"","[Name:groupBox6]")
            ConsoleWrite(_Now() & " "& "Screen capture Control handle: " & $control & @CRLF)
            ;_ScreenCapture_Capture("D:abc.jpg", 350,290,900,420)
            _ScreenCapture_CaptureWnd($path & "AutoIt.jpg", $control)
        EndIf
    EndFunc
    
    ;无论焦点在哪儿,都回归到包含 EvaluationType 行
    Func init($handle)
        $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
        ConsoleWrite(_Now()& " "& $text & @CRLF)
        $text2 = $text
        While StringInStr($text, "EvaluationType =") = 0
            ConsoleWrite(_Now()& " "& $text & @CRLF)
            ControlSend($handle,"","", "{UP}")
            $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
            If $text = $text2 And $text2 = "False" Then
                ControlSend($handle,"","", "{Down}")
                ExitLoop
            EndIf
        WEnd
        ConsoleWrite(_Now()& " "& $text & @CRLF)
    EndFunc
    
    ;无论选项展开了多少次,都让所有的展开项收缩
    Func collapse($handle)
        $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
        ControlSend($handle,"","", "{Down}")
        $text2 = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
        While $text <> $text2
            If StringInStr($text,$text2) <> 0 Then
                ControlSend($handle,"","", "{up}{enter}{down}")
                $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
                ControlSend($handle,"","", "{Down}")
                $text2 = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
            Else
                $text = $text2
                ControlSend($handle,"","", "{Down}")
                $text2 = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
            EndIf
        WEnd
    EndFunc
    
    ;Display the HID in text field automatic
    Func GetHid($filepath)
        Dim $hid
        if FileExists($filepath) Then
            $matches = StringRegExp($filepath, "w{4}-w{4}-w{4}-w{4}-w{4}", 1, 1)
            If IsArray($matches) Then
                $hid = $matches[0]
                Return $hid
            EndIf
    
            FileChangeDir($filepath)
            $search = FileFindFirstFile("*.txt")
            ; 检查搜索是否成功
            If $search = -1 Then
                Return "No HID .txt file found in the path"
            EndIf
            While 1
                $file = FileFindNextFile($search)
                If @error Then
                    ExitLoop
                EndIf
                $matches = StringRegExp($file, "w{4}-w{4}-w{4}-w{4}-w{4}", 3, 1)
                If IsArray($matches) Then
                    $hid = $matches[0]
                    ExitLoop
                EndIf
    
                Local $file2 = FileOpen($file)
                If $file2 = -1 Then
                    ExitLoop
                EndIf
                While 1
                    Local $line = FileReadLine($file2)
                    If @error = -1 Then ExitLoop
                    $matches = StringRegExp($line, "w{4}-w{4}-w{4}-w{4}-w{4}", 3, 1)
                    If IsArray($matches) Then
                        $hid = $matches[0]
                        ExitLoop
                    EndIf
                    $hid = ""
                WEnd
                FileClose($file2)
            WEnd
            ; 关闭搜索句柄
            FileClose($search)
        Else
            Return "File path is not correct"
        EndIf
        Return $hid
    EndFunc
    
    ;设置 Hardware ID
    Func set_hardwareID($hardware_id, $date)
        if StringLen($hardware_id) <> 24 or StringInStr($hardware_id, "-")=0 or StringInStr($date,"/")=0 or StringLen($date)<8 Or  StringLen($date)>19 Then
            MsgBox(0, "Create license error", "Please check the hardware ID or Expire Date format")
        Else
            $handle = WinGetHandle(".NET Reactor")
            if $handle="" then return 0
            ConsoleWrite(_Now() & " "& "Set hardware ID Window handle: " & $handle & @CRLF)
            WinActivate($handle)
            $tab_control = ControlGetHandle($handle,"", "[name:tabControl2]")
            _GUICtrlTab_ClickTab($tab_control, 2)
            SendKeepActive($handle)
            ControlSend($handle,"","", "{tab 4}")
            $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
            While StringInStr($text, "RSAKeyValue") <>0
                ControlSend($handle,"","", "{tab 4}")
                $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
            WEnd
    
            init($handle)
            collapse($handle)
            init($handle)
    
            ;输入日期
            ControlSend($handle,"","", "{down}{enter}{down 2}")
            $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
            If StringInStr($text,"/") <>0 Then
                ControlSetText($handle,"", "[Class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1; Text:False]",$date)
                ControlSend($handle,"","", "{up 2}{enter}{up}")
            Else
                collapse($handle)
                init($handle)
            EndIf
    
            ;输入Hardware ID
            ControlSend($handle,"","", "{down 2}{enter}{down 2}")
            $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
            If StringInStr($text,"-") <>0 Then
                ControlSetText($handle,"", "[Class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1; Text:False]",$hardware_id)
                ControlSend($handle,"","", "{up 2}{enter}{up 2}")
            Else
                collapse($handle)
                init($handle)
            EndIf
        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")
            if $handle="" then return 0
            ConsoleWrite(_Now() & " "& "Save License win handle: " & $handle & @CRLF)
            WinActivate($handle)
    
            $control_handle = ControlGetHandle($handle,"","[Name:button1]")
            ConsoleWrite(_Now() & " "& "Save License Create License button: " & $handle & @CRLF)
            ControlClick($handle,"",$control_handle)
    
            $check = WinWaitActive("Save License As..")
            if $check = 0 Then
                ConsoleWrite(_Now() & " " & "Save License As pop up window failed" & @CRLF)
                Return 0
            EndIf
            $save_window_handle = WinGetHandle("Save License As..")
            ConsoleWrite(_Now() & " "& "Save License popup window handle: " & $save_window_handle & @CRLF)
    
            $save_input_control = ControlGetHandle($save_window_handle,"","Edit1")
            ConsoleWrite(_Now() & " "& "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(_Now() & " "& "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
            If WinWait("All Done", "", 1) <> 0 Then
                $popup_handle = WinGetHandle("All Done")
                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")
            if $handle="" then return 0
            WinActivate($handle)
            SendKeepActive($handle)
            $handle2 = ControlGetHandle($handle, "", "[NAME:menuStrip1]")
            if $handle2 = "" then return 0
            ConsoleWrite(_Now() & " " & "Get menu handle" & $handle2 & @CRLF)
            ControlSend($handle, "","","{ALT}{Tab 2}{Enter}{Down}{Enter}")
            $check = WinWaitActive("License Examiner", "", 5)
            if $check = 0 Then
                ConsoleWrite(_Now() & " " & "License Examiner pop up window failed" & @CRLF)
                Return 0
            EndIf
            $license_exam_handle = WinGetHandle("License Examiner")
            ConsoleWrite(_Now() & " "& "License examiner window handle: " & $license_exam_handle & @CRLF)
    
            $open_license_handle = ControlGetHandle($license_exam_handle,"","[Name:button2]")
            ConsoleWrite(_now() & " 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(_Now() & " " & "Select License File pop up window failed" & @CRLF)
                Return 0
            EndIf
    
            $select_license_handle = WinGetHandle("Please Select License File")
            ConsoleWrite(_Now()& " "& "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", 550, 250)
    
    GUICtrlCreateLabel("Hardware ID", 30, 30, 250, 20)
    $hardware_id = GUICtrlCreateLabel("XXXX-XXXX-XXXX-XXXX-XXXX", 30, 50, 250, 20)
    
    GUICtrlCreateLabel("Expire Date", 300, 30, 200, 20)
    $tTime = _Date_Time_GetSystemTime()
    $aTime = _Date_Time_SystemTimeToArray($tTime)
    $date = $aTime[2] & "/"  & $aTime[0] & "/" & "1"
    $date2 = _DateAdd("M", 2, $date)
    $date = GUICtrlCreateInput($date2, 300, 50, 200, 20)
    
    
    GUICtrlCreateLabel("License File Path", 30, 100, 120, 20)
    $path = GUICtrlCreateInput("", 30, 120, 472, 20)
    GUICtrlSetState(-1, $GUI_FOCUS)
    
    ;$display_HID = GUICtrlCreateButton("Display HID", 30, 170, 120, 20)
    $exam_License = GUICtrlCreateButton("Exam License", 30, 180, 120, 20)
    $Create_License = GUICtrlCreateButton("Create License", 180, 180, 120, 20)
    $Save_License = GUICtrlCreateButton("Save License", 330, 180, 120, 20)
    
    GUISetState()
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                Exit
            Case $msg = $Create_License
                $hid = GetHid(GUICtrlRead($path))
                GUICtrlSetData($hardware_id, $hid)
                GUISetState()
                set_hardwareID(GUICtrlRead($hardware_id), GUICtrlRead($date))
            Case $msg = $Save_License
                save_license(GUICtrlRead($path))
                screen_capture(GUICtrlRead($path))
            Case $msg = $exam_License
                exam_license(GUICtrlRead($path))
        EndSelect
    Wend

    界面图片如下:

    界面比以前更加清洁了,功能使用起来更加简单了。

  • 相关阅读:
    环境是如何建立的 启动文件有什么
    环境中存储的是什么
    串行 并行 异步 同步
    TPC-H is a Decision Support Benchmark
    进程通信类型 管道是Linux支持的最初Unix IPC形式之一 命名管道 匿名管道
    删除环境变量
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
  • 原文地址:https://www.cnblogs.com/autotest/p/3408015.html
Copyright © 2011-2022 走看看