選擇那一種方式執行外部程式端看最終的目的,善用F1 可以獲得詳細的說明,這篇以RunWait()解說執行外部程式為範例,程式的目的是重置Windows 的管理者密碼,使用Sysinternals 所提供的PSPasswd.exe 工具,之後有機會會介紹一下Windows Sysinternals ,裡面提供了不少好用的工具,而且是微軟所提供,安全性及穗定性也較有保障。
RegWrite("HKEY_CURRENT_USER\Software\Sysinternals\PsPasswd" , "EulaAccepted", "REG_DWORD", "1")
這一段程式是預先同意程式License Agreement,避免執行程式跑出意外的視窗如下:
PsPasswd 提供修改密碼的功能,我們可以執行一次程式看看提供程式提供了那些參數,在此不額外贅述,請參考下方
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
沒有留言:
張貼留言