2017年7月3日 星期一

AutoIt 執行外部程式

除了自已可以透過AutoIt語法寫出想要的功能,但是有時侯如果作業系統或已有現成的工具可以達到想要的目的。直接執行工具不失為一個省時省力的好方法,AutoIt 提供了蠻多執行外部程式的方式,Run()、RunWait()、RunAs()、RunAsWait()、ShellExecute()、ShellExecuteWait()等等,都可以執行外部程式或者自行撰寫的Batch File。
選擇那一種方式執行外部程式端看最終的目的,善用F1 可以獲得詳細的說明,這篇以RunWait()解說執行外部程式為範例,程式的目的是重置Windows 的管理者密碼,使用Sysinternals 所提供的PSPasswd.exe 工具,之後有機會會介紹一下Windows Sysinternals ,裡面提供了不少好用的工具,而且是微軟所提供,安全性及穗定性也較有保障。

 RegWrite("HKEY_CURRENT_USER\Software\Sysinternals\PsPasswd" , "EulaAccepted", "REG_DWORD", "1")
這一段程式是預先同意程式License Agreement,避免執行程式跑出意外的視窗如下:

image

PsPasswd 提供修改密碼的功能,我們可以執行一次程式看看提供程式提供了那些參數,在此不額外贅述,請參考下方
image


RunWait(@ComSpec & " /c " & "pspasswd.exe \\" & @ComputerName & " administrator " & $sNewPassword,@ScriptDir,@SW_HIDE)

這一段程式是最主要的功能,使用RunWait()的功能是執行外部程式,並等待程式執行結束後回到原來的AutoIt 程序,如果使用Batch File 很難達到這一點,最好用的是加上@SW_HIDE 參數後可以達到背景執行,透過派送工具執行時一般使用者是沒有感覺的。


範例:



#cs -------------------------------------------------------------------

AutoIt Version: 3.3.14.2
Author: 奔騰兔開發誌
Date : 2017/07/03
Script Function: Script Demo
Description :呼叫外部程式的簡單運用
Notes:http://pentiumto.blogspot.tw/


#ce -------------------------------------------------------------------


Opt("TrayIconDebug", 1) ;0=no info, 1=debug line info
Opt("TrayIconHide", 0) ;0=show, 1=hide tray icon

Dim $sNowtime=@YEAR &"-"& @MON &"-"& @MDAY &" "& @HOUR &":"& @MIN

ConsoleWrite($sNowtime & " [Info] " & @ScriptLineNumber & " 自訂訊息可以在開發過程除錯 "&@CRLF)


Dim $sNewPassword = "NewPassword"


_ExecReset()


Func _ExecReset()


RegWrite("HKEY_CURRENT_USER\Software\Sysinternals\PsPasswd" , "EulaAccepted", "REG_DWORD", "1")

Sleep(1000)

RunWait(@ComSpec & " /c " & "pspasswd.exe \\" & @ComputerName & " administrator " & $sNewPassword,@ScriptDir,@SW_HIDE)


EndFunc


沒有留言:

張貼留言