版本六中存在一个显著问题是:
当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
界面如下: