嘗試把一個檔案自動化檢查MD5,並加上註記寫入txt檔作為紀錄,但記錄時需要打字,所以研究了一下如何以GUI輸入文字作為變數。
; ==============================GUI全域設定==============================
GuiCloseOK:
GuiControlGet, MyEdit ;輸入內容存為變數MyEdit
Gui, Destroy
return
GuiCloseCancel:
MyEdit:=""
Gui, Destroy
return
; ==============================全域設定結束==============================
::/test::
Gui, Color, White
Gui, Add, Edit, x22 y19 w240 h120 vMyEdit, 異動了甚麼? ;GUI內文,輸入內容寫入MyEdit
Gui, Add, Button, x22 y179 w100 h30 gGuiCloseOk, Ok ;GUI點OK觸發gGuiCloseOk
Gui, Show, w286 h231, log ;GUI標題
WinGetPos,,, Width, Height, log ;取得視窗座標
WinMove, log,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2) ;調整視窗座標
WinWaitClose, log
Gui, Destroy ;關閉GUI
StringReplace, MyEdit, MyEdit, `r`n, , All ; 移除MyEdit中所有的 CR+LF
Sleep, 5000 ;卸載後無法馬上解析檔案,停留5秒
; 以HashMyFiles.exe將目標檔案輸出MD5至txt,排除SHA1、CRC32、SHA256、SHA512、SHA384
Run "%A_ScriptDir%\..\Tools\hashmyfiles-x64\HashMyFiles.exe" /SHA1 0 /CRC32 0 /SHA256 0 /SHA512 0 /SHA384 0 /SaveDirect /file %DropboxDIR%\%file% /scomma %DropboxDIR%\temp.txt
SetTimer, fileMD5check, -10000 ;10秒後執行fileMD5check
return
fileMD5check:
Loop, Read, %DropboxDIR%\temp.txt
{
LineNumber := A_Index ;先令Loop, Read得到的A_Index(此處為行數)為變數LineNumber
Loop, parse, A_LoopReadLine, CSV ;以CVS格式切每行內容(用逗號切)
{
if A_Index = 1 ;意思是擷取每行第1個(在此為檔名)
FileAppend, %A_YYYY%/%A_MM%/%A_DD% %A_Hour%:%A_Min%:%A_Sec%@%A_ComputerName%`,%A_LoopField%`,, %DropboxDIR%\md5.txt ;時間、電腦名稱、檔名寫入文字文件
if A_Index = 2 ;意思是擷取每行第2個(在此為MD5)
FileAppend, %A_LoopField%`,%MyEdit%`n, %DropboxDIR%\md5.txt ;MD5、輸入的文字寫入文字文件
}
FileDelete, %DropboxDIR%\temp.txt
Gui, +AlwaysOnTop +Disabled -SysMenu +Owner ; +Owner 避免顯示任務欄按鈕.
Gui, Color, White
Gui, Add, Text,, file MD5 hash value checksum done!`r`nMD5 is %A_LoopField%`r`n(2秒後自動關閉)
Gui, Show, NoActivate, MD5 Hash ; NoActivate 讓當前活動窗口繼續保持活動狀態.
Sleep, 2000
Gui, Destroy ;關閉GUI
Return
參考資料: