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


    版本六中存在一个显著问题是:

    当exe文件生存之后,运行的时候,通过consoleWrite函数打印出来的数据是无法展示出来的。这就存在一个问题:当运行失败的时候,我还是看不到任何log信息。

    于是,我对程序再次进行了优化,代码如下:

    #include <ScreenCapture.au3>
    #include <GuiConstantsEx.au3>
    #include <date.au3>
    #include <GuiTab.au3>
    #include <GuiEdit.au3>
    #include <GuiScrollBars.au3>
    #include <WindowsConstants.au3>
    #include <GuiListBox.au3>
    
    Opt("WinTitleMatchMode")
    AutoItSetOption("SendKeyDelay")
    AutoItSetOption("WinWaitDelay")
    Global $hListBox
    
    ;区域截图
    Func screen_capture($path)
        If Not FileExists($path) or StringInStr($path,"")=0 Then
            _GUICtrlListBox_AddString($hListBox, _Now() & " " & "Failed to Save Screen Capture Picture: Path is not correct")
            return
        EndIf
    
        $handle = WinGetHandle(".NET Reactor")
        if $handle="" then
            _GUICtrlListBox_AddString($hListBox, _Now() & " " & "Failed to Screen Capture: can not get .NET Reactor window handle")
            return
        EndIf
    
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get Screen capture Window Handle")
        WinActivate($handle)
        $control = ControlGetHandle($handle,"","[Name:groupBox6]")
        if $control = "" then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to Get Screen capture Group box handle")
            return
        EndIf
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get Screen capture Group box handle")
        _ScreenCapture_CaptureWnd($path & "AutoIt.jpg", $control)
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Save picture as AutoIt.jpg")
    EndFunc
    
    ;无论焦点在哪儿,都回归到包含 EvaluationType 行
    Func init($handle)
        $text = ControlGetText($handle,"","[class:WindowsForms10.EDIT.app.0.1f550a4_r15_ad1]")
        $text2 = $text
        While StringInStr($text, "EvaluationType =") = 0
            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
    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)
        IF Not FileExists($filepath) or StringInStr($filepath,"")=0 Then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to get HID: File path is not correct")
            Return ""
        EndIf
        Dim $hid
        $matches = StringRegExp($filepath, "w{4}-w{4}-w{4}-w{4}-w{4}", 1, 1)
        If IsArray($matches) Then
            $hid = $matches[0]
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get HID from file path")
            Return $hid
        EndIf
        FileChangeDir($filepath)
        $search = FileFindFirstFile("*.txt")
        ; 检查搜索是否成功
        If $search = -1 Then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to found HID from .txt file in the path")
            Return
        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]
                _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get HID from Text file name")
                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]
                    _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get HID from txt file in file path")
                    ExitLoop
                EndIf
                $hid = ""
            WEnd
            FileClose($file2)
        WEnd
        ; 关闭搜索句柄
        FileClose($search)
        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
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to set HID: hardware ID or Expire Date format wrong")
            return
        EndIf
        $handle = WinGetHandle(".NET Reactor")
        if $handle="" then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to get .NET Reactor handle")
            Return
        EndIf
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "get .NET Reactor handle")
        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)
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Set Date in Grid " & $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)
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Set HID in Grid " & $hardware_id)
            ControlSend($handle,"","", "{up 2}{enter}{up 2}")
        Else
            collapse($handle)
            init($handle)
        EndIf
    EndFunc
    
    ;保存 License
    Func save_license($path)
        if FileExists($path)= 0 or StringInStr($path,"")=0 Then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to Save License: Path is not correct")
            Return
        EndIf
        $handle = WinGetHandle(".NET Reactor")
        if $handle="" then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to Save License: Failed to Get .NET reactor handle")
            Return
        EndIf
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get Save License Window handle")
        WinActivate($handle)
    
        $control_handle = ControlGetHandle($handle,"","[Name:button1]")
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "get Save License pop up")
        ControlClick($handle,"",$control_handle)
    
        $check = WinWaitActive("Save License As..")
        if $check = 0 Then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to save license: Read pop up window failed")
            Return
        EndIf
        $save_window_handle = WinGetHandle("Save License As..")
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get save license as pop up window")
    
        $save_input_control = ControlGetHandle($save_window_handle,"","Edit1")
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get Save License input field handle")
    
        ControlSetText($save_window_handle,"",$save_input_control,$path & "SageTouch.License")
        $save_button_handle = ControlGetHandle($save_window_handle,"","Button1")
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get Save License Save button")
    
        ControlClick($save_window_handle,"",$save_button_handle)
        if WinWait("确认另存为","",1)<>0 Then
            $popup_handle = WinGetHandle("确认另存为")
            WinWaitActive($popup_handle)
            ControlClick($popup_handle,"", "Button1")
            WinWaitClose($popup_handle, "", "Button1")
        EndIf
        If WinWait("All Done", "", 1) <> 0 Then
            $popup_handle = WinGetHandle("All Done")
            WinWaitActive($popup_handle)
            ControlClick($popup_handle,"", "Button1")
            WinWaitClose($popup_handle, "", "Button1")
        EndIf
    EndFunc
    
    ;检查 License 是否是正确的
    Func exam_license($path)
        If FileExists($path & "SageTouch.License")=0 or StringInStr($path,"")=0 Then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to find Sagetouch.License in the path")
            Return
        EndIf
        $handle = WinGetHandle(".NET Reactor")
        if $handle="" then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to Exam license, not get .Net Reactor win handle")
            Return
        EndIf
    
        WinActivate($handle)
        SendKeepActive($handle)
        $handle2 = ControlGetHandle($handle, "", "[NAME:menuStrip1]")
        if $handle2 = "" then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to get Exam License Menu handle failed")
            Return
        EndIf
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get menu handle")
        ControlSend($handle, "","","{ALT}{Tab 2}{Enter}{Down}{Enter}")
        $check = WinWaitActive("License Examiner", "", 5)
        if $check = 0 Then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to get exam license Pop up")
            Return
        EndIf
        $license_exam_handle = WinGetHandle("License Examiner")
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get License Examiner pop up")
    
        $open_license_handle = ControlGetHandle($license_exam_handle,"","[Name:button2]")
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Get button on License Examiner pop up")
        ControlClick($license_exam_handle,"",$open_license_handle)
    
        $check = WinWaitActive("Please Select License File", "", 5)
        if $check = 0 Then
            _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Failed to Select License File pop up window")
            Return
        EndIf
    
        $select_license_handle = WinGetHandle("Please Select License File")
        _GUICtrlListBox_AddString($hListBox, _Now() & " "& "Select License File pop up window")
    
        $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)
    EndFunc
    
    ;Create a new GUI
    GUICreate("Create License", 550, 450)
    
    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)
    
    $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)
    
    Global $hListBox = GUICtrlCreateList("Create License Log Info", 5, 230, 540, 190, BitOR($WS_BORDER, $WS_VSCROLL, $LBS_DISABLENOSCROLL, $LBS_NOTIFY, $WS_HSCROLL))
    
    GUISetState()
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_UpdateHScroll($hListBox)
    _GUICtrlListBox_EndUpdate($hListBox)
    
    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

    界面如下:

  • 相关阅读:
    《秒杀系统架构分析与实战 》
    《豆瓣的基础架构》
    转--《亿级用户下的新浪微博平台架构 》
    转-《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践 》
    hdu2029
    hdu2027
    hdu2026(water~~)
    PHP电影小爬虫(2)
    今天来做一个PHP电影小爬虫。
    PHP Simple HTML DOM解析器
  • 原文地址:https://www.cnblogs.com/autotest/p/3414095.html
Copyright © 2020-2023  润新知