註:
- 「運維數據集中」屬於知識體系的「工具-運維開發-autoit3腳本語言」
- 本篇介紹一下autoit腳本語言的使用,主要作為經驗的總結
- 語法的介紹有些摘自操作文檔
一、背景:
運維自動化中的操作自動化,比如安裝部署,應急操作,伺服器切換等偏操作類的工作,歸到最底層就是一個個腳本按既定的流程,通過代理(或無代理的SSH方式)遠程調用執行。同時,為了提高使用效率提供流程編排,豐富操作可視化,再通常CMDB關聯監控,流程審批等工具實現工具間的互聯互通,形成管理上的閉環。
對於最底層的腳本,目前可供我們選擇的有很多,比如常用的python,shell,bat。在實際實踐中,windows作業系統下的運維操作的自動化比linux更麻煩一些。因為在linux下的日常運維操作的就是一些命令的組合,通過python或shell可以比較快的實現。windows則不同,我們的習慣是滑鼠在前端工具上操作,這不是python等腳本語言所不擅長的,如果要用python等腳本實現,需要運維人員在思維進行轉變,將前端的界面操作轉換轉化為後臺可運行的腳本語言實現。另外,當遇到一些不支持二次開發的商業軟體,上面的轉換就會變得無解。比如:
- 每天需要在一個現有的C/S軟體上進行開關操作,但這個軟體工具又不提供任何接口;
- 要在幾十臺機器上給病毒軟體打個補丁,但軟體廠家只提供一個在軟體菜單上點擊按鈕的方式來實現升級;
上面兩種情況,有幾個特點:
解決上面的問題是autoit腳本語言的強項,autoit腳本是一種在WINDOWS下模擬手工操作的腳本語言,可以作為需要在WINDWOS界上進行操作的自動化,比如:
二、語言概況:
1、一些基本的語法:
語法有很多,具體可以到網上下載一個幫助文檔,下面只摘常用的幾點:
1)條件if … then ….else….endif
If $var > 10 Then
MsgBox(0, "示例", $var & " 果真大於 10!^_^")
Else
MsgBox(0, "示例", $var & " 居然小於 10!?-_-!")
EndIf
2)條件select
$var = 30
Select
Case $var > 1 AND $var <= 10
MsgBox(0, "示例", "$var 大於 1")
Case $var > 10 AND $var <= 20
MsgBox(0, "示例", "$var 大於 10")
Case $var > 20 AND $var <= 30
MsgBox(0, "示例", "$var 大於 20")
Case $var > 30 AND $var <= 40
MsgBox(0, "示例", "$var 大於 30")
Case $var > 40
MsgBox(0, "示例", "$var 大於 40")
EndSelect
3)FOR
For $i = 5 to 1 Step -1
MsgBox(0, "倒數", $i)
Next
MsgBox(0,"", "循環結束")
4)While...WEnd
While $i<3
MsgBox(0,"example",$i)
$i = $i + 1
WEnd
MsgBox(0,"", "循環結束")
5)Do...Until
Do
MsgBox(0, "目前變量 $i 的值是: ", $i)
$i = $i + 1
Until $i = 10
6) 函數
$val = 10
For $i = 1 To 10
$doubled = MyDouble($val)
MsgBox(0, "", $val & " 的兩倍是 " & $doubled)
$val = $doubled
Next
Exit
Func MyDouble($value)
$value = $value * 2
Return $value
EndFunc
7) 注釋
單行: ;
多行:
#comments-start
...
...
#comments-end
註:縮寫代替:#cs 和 #ce。
8) 嵌入文件
#include
9)參數:
AutoIt3.exe myscript.au3 參數1 "這是一個字符串型參數"
$CmdLine[0] 等價於... 2
$CmdLine[1] 等價於... 參數1
$CmdLine[2] 等價於...這是一個字符串型參數
@ScriptName 等價於... myscript.au3
$CmdLineRaw,它保存著完整的未被拆分的命令行語句,等價於...myscript.au3 參數1 "這是一個字符串型參數"
2、常用的一些方法
1)SEND(對指定窗口發送鍵盤命令時會用到)
'^':表示告知 AutoIt 要發送一個 CONTROL 鍵擊動作,因此語句 Send("^!a") 的意思是發送按鍵 "CTRL+ALT+a"。以下是一些常用的鍵盤按鍵:
Send 命令(無標誌參數)
鍵擊結果
{!}
!
{#}
#
{+}
+
{^}
^
{{}
{
{}}
}
{SPACE}
空格
{ENTER}
主鍵盤區的 回車鍵
{ALT}
ALT
{BACKSPACE} 或 {BS}
退格
{DELETE} 或 {DEL}
刪除(DELETE)
{UP}
向上箭頭
{DOWN}
向下箭頭
{LEFT}
向左箭頭
{RIGHT}
向右箭頭
{HOME}
HOME
{END}
END
{ESCAPE} 或 {ESC}
ESC鍵
{INSERT} 或 {INS}
INS(Insert)
{PGUP}
PageUp
{PGDN}
PageDown
{F1} - {F12}
功能鍵
{TAB}
TAB
{PRINTSCREEN}
Print Screen key
{LWIN}
左徽標鍵
{RWIN}
右徽標鍵
{NUMLOCK on}
NUMLOCK (on/off/toggle)(開/關/切換)
{CAPSLOCK off}
CAPSLOCK (on/off/toggle)(開/關/切換)
{SCROLLLOCK toggle}
SCROLLLOCK (on/off/toggle)(開/關/切換)
{CTRLBREAK}
Ctrl+Break
{PAUSE}
PAUSE
{NUMPAD0} - {NUMPAD9}
數字鍵盤上的 數字鍵
{NUMPADMULT}
數字鍵盤上的 乘號
{NUMPADADD}
數字鍵盤上的 加號
{NUMPADSUB}
數字鍵盤上的 減號
{NUMPADDIV}
數字鍵盤上的 除號
{NUMPADDOT}
數字鍵盤上的 點號
{NUMPADENTER}
數字鍵盤上的 回車鍵
{APPSKEY}
Windows 應用程式鍵
{LALT}
左 ALT 鍵
{RALT}
右 ALT 鍵
{LCTRL}
左 CTRL 鍵
{RCTRL}
右 CTRL 鍵
{LSHIFT}
左 Shift 鍵
{RSHIFT}
右 Shift 鍵
{SLEEP}
系統休眠(SLEEP)鍵
{ALTDOWN}
按住 ALT 鍵直到發送 {ALTUP} 為止
{SHIFTDOWN}
按住 SHIFT 鍵直到發送 {SHIFTUP} 為止
{CTRLDOWN}
按住 CTRL 鍵直到發送 {CTRLUP} 為止
{LWINDOWN}
按住左徽標鍵直到發送 {LWINUP} 為止
{RWINDOWN}
按住右徽標鍵直到發送 {RWINUP} 為止
{ASC nnnn}
發送 ALT+nnnn 組合鍵
2、滑鼠MouseClick
; 在當前位置執行一次雙擊
MouseClick("left")
MouseClick("left")
; 在位置 0,500 雙擊
MouseClick("left", 0, 500, 2)
3、RUN
運行外部程序。
Run ( "文件名" [, "工作目錄" [, 標誌]] )
Run("Notepad.exe", "", @SW_MAXIMIZE)
4、ProcessClose
結束某個進程。
ProcessClose ( "進程名" )
ProcessClose("notepad.exe")
; 返回記事本程序的 PID,若未發現該進程則返回值為 0。
$PID = ProcessExists("notepad.exe")
If $PID Then ProcessClose($PID)
ProcessExists
註:ProcessExists ( "進程名" )的用法:
進程名是指可執行文件的名稱(無需給出完整路徑),例如:"notepad.exe" 或 "winword.exe"
PID 是標識進程的唯一的數值。
為使 ProcessExists 函數能在 Windows NT 4.0 下工作,系統還需要一個 DLL 文件(PSAPI.DLL,已包含在 AutoIt 的安裝目錄下)。
每隔 250 毫秒左右進程將被檢測一次。
示例
If ProcessExists("notepad.exe") Then
MsgBox(0, "示例", "記事本運行中。")
EndIf
5、WinWaitActive
暫停腳本的執行直至指定窗口被激活(成為可活動狀態)為止。
WinWaitActive ( "窗口標題", ["窗口文本"], [超時時間] )
參數
窗口標題
目標窗口標題。
窗口文本
[可選參數] 目標窗口文本。
超時時間
[可選參數] 以秒為單位。
返回值
;等待窗口 "無標題" 出現並激活
WinWaitActive("無標題")
;同上,但指定了等待時間為 5 秒
WinWaitActive("無標題", "", 5)
6、MsgBox
通常用在調試當中
MsgBox(0, "標題", "內容")
上面幾個命令用上,就能做一些簡單的操作了,實際使用過程中,如果遇到一些操作可以查一下幫助文檔。下面這些是我作了一些匯總的函數,可以找到了函數再去找幫助文檔比較快:
7、其它函數
Abs 求某個數的絕對值.
ACos 求某個數的反餘弦值(arcCosine).
AdlibRegister 註冊一個 Adlib 函數.
AdlibUnRegister
Asc 返回某字符的 ASCII 碼數值.
AscW 返回 Unicode 字符的代碼.
ASin 求某個數的反正弦值(arcsine).
Assign 給指定變量賦值.
ATan 求某個數的反正切值(arctangent).
AutoItSetOption 調整Autoit各種函數/參數的運作方式.
AutoItWinGetTitle 獲取 AutoIt 窗口的標題名.
AutoItWinSetTitle 修改 AutoIt 窗口的標題名.
Beep 播放 beep 聲音(PC蜂鳴器).
Binary 返回一個表達式的二進位值.
BinaryLen 返回一個二進位變量的所用字節數.
BinaryMid 取出二進位變量裡面X字節的內容.
BinaryToString 轉換一個二進位變量為一個字符串.
BitAND 按位"與"運算.
BitNOT 按位"取反"運算.
BitOR BitOR 按位"或"運算.
BitRotate 執行位移操作, 使用旋度.
BitShift 按位"移"運算.
BitXOR 按位"異或"運算.
BlockInput 屏蔽/啟用滑鼠與鍵盤(輸入).
Break 允許或禁止用戶從腳本程序的託盤菜單中退出.
Call 調用用戶自定義函數.可以包含字符串參數.
CDTray 彈出或關閉光碟機.
Ceiling 返回一個數的四捨五入值(最靠近的最大整數).
Chr 返回指定ASCII碼所對應的字符.
ChrW 返回一個字符對應的Unicode(統一的字符編碼標準, 採用多字節對字符進行編碼)代碼.
ClipGet 獲取剪切板裡的文本.
ClipPut 在剪切板中寫入文本.
ConsoleRead 讀取AU3進程中的 STDIN 流字符.
ConsoleWrite 寫入數據到 STDOUT 流.一些文本編輯器可以讀取這個流作為其它程序可接受的數據.
ConsoleWriteError 寫入數據到 STDERR 流. 一些文本編輯器可以讀取這個流作為其它程序可接受的數據.
ControlClick 向指定控制項發送滑鼠點擊命令.
ControlCommand 向指定控制項發送命令.
ControlDisable 禁用或使某控制項變成灰色不可用狀態.
ControlEnable 使灰色按鈕/控制項變為"可用"狀態.
ControlFocus 設置輸入焦點到指定窗口的某個控制項上.
ControlGetFocus 返回指定窗口上鍵盤焦點所在的控制項的類別名.
ControlGetHandle 獲取指定控制項的內部句柄.
ControlGetPos 獲取指定控制項相對其窗口的坐標位置和大小等信息.
ControlGetText 獲取指定控制項上的文本.
ControlHide 隱藏指定控制項.
ControlListView 向指定的 ListView32 控制項發送命令.
ControlMove 在窗口內移動控制項.
ControlSend 向指定的控制項發送字符串.
ControlSetText 修改指定控制項的文本.
ControlShow 顯示已經隱藏的控制項.
ControlTreeView 發送一個命令到 TreeView32 控制項.
Cos 求某個數的餘弦值(cosine).
Dec 返回某十六進位數的十進位數值.
DirCopy 複製指定目錄及其所有子目錄和文件(類似於xcopy命令).
DirCreate 新建一個目錄/文件夾.
DirGetSize 返回給點目錄所佔用的空間(單位字節).
DirMove 移動指定目錄及其所有子目錄和文件.
DirRemove 刪除一個目錄/文件夾.
DllCall 調用指定DLL(動態連結庫)文件裡面的函數.
DllCallbackFree 清空先前由 DllCallbackRegister 創建的句柄.
DllCallbackGetPtr 返回一個回調函數的指針,可以用於傳遞給一個 Win32 API.
DllCallbackRegister 創建一個用戶自定義回調函數.
DllClose 關閉此前打開的DLL文件.
DllOpen 打開指定的 DLL 文件以供 DllCall 函數使用.
DllStructCreate 創建一個 C/C++ 樣式的數據結構供 DllCall 使用.
DllStructGetData 返回數據結構(struct)元素的數據.
DllStructGetPtr 返回 數據結構(struct) 或者 數據結構(struct)的一個元素的指針.
DllStructGetSize 返回一個數據結構(struct)的大小,單位為字節.
DllStructSetData 設置數據結構(struct)中部分元素的數據.
DriveGetDrive 返回一個含有指定驅動器盤符的數組.
DriveGetFileSystem 返回指定驅動器的文件系統類型.
DriveGetLabel 返回指定的驅動器分區的卷標(如果存在).
DriveGetSerial 返回指定驅動器的序列號.
DriveGetType 返回指定驅動器的類型.
DriveMapAdd 映射網絡驅動器.
DriveMapDel 斷開網絡驅動器.
DriveMapGet 獲取已映射網絡驅動器的路徑.
DriveSetLabel 修改指定驅動器的卷標.
DriveSpaceFree 以MB(兆字節)為單位返回指定路徑所在分區的剩餘空間.
DriveSpaceTotal 以MB(兆字節)為單位返回指定路徑所在分區的容量大小.
DriveStatus 以字符串的形式返回指定驅動器的狀態.
EnvGet 返回指定的系統環境變量的值.
EnvSet 寫入或修改一個環境變量.
EnvUpdate 刷新作業系統的環境變量.
Eval 返回字符串形式的變量的值.
Execute 執行一個表達式(主要用於數學求值).
Exp 求自然對數 e 的指定冪運算結果.
FileChangeDir 更改當前的工作目錄.
FileClose 關閉此前已打開的文本文件.
FileCopy 複製一個或多個文件.
FileCreateNTFSLink 創建一個 NTFS 硬連接到一個文件或者文件夾.
FileCreateShortcut 創建指定文件的快捷方式(.lnk文件).
FileDelete 刪除一個或多個文件.
FileExists 檢查指定文件或目錄是否存在.
FileFindFirstFile 返回一個依照搜索的字符串得到的搜索"句柄".
FileFindNextFile 搜索指定字符串並返回(下一個)與之匹配的文件名,但要求在調用過 FileFindFirstFile 函數之後.
FileFlush 娓呯┖鏂囦歡緙撳啿鍣ㄥ埌紓佺洏.
FileGetAttrib 返回指定文件的屬性代碼.
FileGetLongName 返回指定路徑的長文件名.
FileGetPos 榪斿洖褰撳墠鏂囦歡鍧愭爣.
FileGetShortcut 獲取指定快捷方式的各種屬性.
FileGetShortName 返回指定路徑的短文件名(按8.3命名規則,即文件前綴8個字符,後綴3個字符).
FileGetSize 以字節為單位返回指定文件的大小.
FileGetTime 返回指定文件的時間戳(時間和日期)信息.
FileGetVersion 返回指定"文件"(通常是指可執行文件)的版本信息.
FileInstall 包含並裝入指定文件到編譯後的腳本程序中.
FileMove 移動一個或多個文件.
FileOpen 打開指定的文件以供讀寫.
FileOpenDialog 顯示一個文件打開對話框.
FileRead 從此前已打開的文本文件中讀取指定數量的字符.
FileReadLine 從此前已打開的文本文件中讀取指定行的字符.
FileRecycle 把指定的文件或目錄放入回收站.
FileRecycleEmpty 清空回收站.
FileSaveDialog 顯示一個文件保存對話框.
FileSelectFolder 顯示一個文件夾選擇對話框.
FileSetAttrib 修改一個或多個文件的屬性.
FileSetPos Sets the current file position.
FileSetTime 修改一個或多個文件的時間戳.
FileWrite 向此前已打開的文本文件尾追加一行數據.
FileWriteLine 向此前已打開的文本文件尾追加一行數據.
Floor 返回一個數的四捨五入值(最靠近的最小整數).
FtpSetProxy 設置訪問FTP時使用的代理伺服器.
GUICreate 創建一個 GUI 窗口.
GUICtrlCreateAvi 在GUI上創建一個AVI視頻剪輯控制項.
GUICtrlCreateButton 在GUI上創建一個按鈕控制項.
GUICtrlCreateCheckbox 在GUI上創建一個複選框(Checkbox)控制項.
GUICtrlCreateCombo 在GUI上創建一個組合列表框(ComboBox)控制項.
GUICtrlCreateContextMenu 在指定控制項或GUI窗口上創建上下文菜單(右鍵).
GUICtrlCreateDate 在GUI上創建一個日期控制項.
GUICtrlCreateDummy 在GUI上創建一個 Dummy 控制項.
GUICtrlCreateEdit 在GUI上創建一個編輯框(Edit)控制項.
GUICtrlCreateGraphic 在GUI上創建一個繪圖(Graphic)控制項.
GUICtrlCreateGroup 在GUI上創建一個分組(Group)控制項.
GUICtrlCreateIcon 在GUI上創建一個圖標(Icon)控制項.
GUICtrlCreateInput 在GUI上創建一個輸入框(Input)控制項.
GUICtrlCreateLabel 在GUI上創建一個靜態標籤(Label)控制項.
GUICtrlCreateList 在GUI上創建一個列表(List)控制項.
GUICtrlCreateListView 在GUI上創建一個 ListView 控制項.
GUICtrlCreateListViewItem 在GUI上創建一個 ListView 項目控制項.
GUICtrlCreateMenu 在GUI上創建一個菜單控制項.
GUICtrlCreateMenuItem 在GUI上創建一個菜單項目控制項.
GUICtrlCreateMonthCal 在GUI上面創建一個月曆控制項.
GUICtrlCreateObj 在GUI上面創建一個 ActiveX 控制項.
GUICtrlCreatePic 在GUI上創建一個圖片控制項.
GUICtrlCreateProgress 在GUI上創建一個進度條控制項.
GUICtrlCreateRadio 在GUI上創建一個單選框(Radio)控制項.
GUICtrlCreateSlider 在GUI上創建一個滑動條(Slider)控制項.
GUICtrlCreateTab 在GUI上創建一個標籤頁(Tab)控制項.
GUICtrlCreateTabItem 在GUI上創建一個標籤頁控制項項目.
GUICtrlCreateTreeView 在GUI上創建一個 TreeView 控制項.
GUICtrlCreateTreeViewItem 在GUI上創建一個 TreeView 控制項項目。
GUICtrlCreateUpdown 在GUI上創建一個 Updown(上下箭頭)控制項。
GUICtrlDelete 刪除指定控制項.
GUICtrlGetHandle 返回一個指定控制項的句柄或者特殊(項目)句柄(Menu, ContextMenu, TreeViewItem).
GUICtrlGetState 獲取指定控制項的當前狀態。
GUICtrlRead 讀取指定控制項的狀態或相關數據.
GUICtrlRecvMsg 獲取控制項消息。向指定控制項發送消息並獲取返回的 lParam 的值。
GUICtrlRegisterListViewSort Register a user defined function for an internal listview sorting callback function.
GUICtrlSendMsg 向指定控制項發送消息。
GUICtrlSendToDummy 向指定的 Dummy(虛擬)控制項發送消息
GUICtrlSetBkColor 設置指定控制項的背景顏色。
GUICtrlSetColor 設置指定控制項的文本顏色。
GUICtrlSetCursor 為特定控制項指定一個滑鼠指針.
GUICtrlSetData 修改指定控制項的數據.
GUICtrlSetDefBkColor 設置 GUI 窗口中所有控制項的默認背景色.
GUICtrlSetDefColor 設置 GUI 窗口中所有控制項文本默認顏色.
GUICtrlSetFont 設置指定控制項的字體.
GUICtrlSetGraphic 修改一個控制項的圖形數據.
GUICtrlSetImage 設置指定控制項的位圖或圖標.
GUICtrlSetLimit 設置某些控制項的字符數或象素數限制.
GUICtrlSetOnEvent 為指定控制項的點擊行為定義一個用戶函數.
GUICtrlSetPos 調整某個控制項在窗口中的坐標位置.
GUICtrlSetResizing 設置某個控制項的大小調整方式.
GUICtrlSetState 調整指定控制項的狀態.
GUICtrlSetStyle 更改指定控制項的樣式.
GUICtrlSetTip 定義指定控制項的關聯提示文本.
GUIDelete 刪除指定窗口和它包含的所有控制項.
GUIGetCursorInfo 獲取(相對於 GUI 窗口的)滑鼠位置.
GUIGetMsg 捕獲窗口消息.
GUIGetStyle 返回一個 GUI 窗口所使用的樣式.
GUIRegisterMsg 為已知的Windows 消息代碼(WM_MSG)註冊一個用戶自定義的函數.
GUISetAccelerators Sets the accelerator table to be used in a GUI window.
GUISetBkColor 為GUI窗口設置背景顏色.
GUISetCoord 為下一個控制項設置絕對坐標.
GUISetCursor 設置(滑鼠經過窗口時的)滑鼠指針.
GUISetFont 設置窗口的默認字體.
GUISetHelp 設置在用戶按下F1時就打開的(可執行)文件.
GUISetIcon 設置窗口圖標.
GUISetOnEvent 褰撲竴涓郴緇熸寜閽鐐瑰嚮鏃惰皟鐢ㄤ竴涓敤鎴瘋嚜瀹氫箟鍑芥暟(UDF).
GUISetState 調整窗口的狀態.
GUISetStyle 改變窗口樣式.
GUIStartGroup 使此後所有被創建的控制項都歸為一組.
GUISwitch 切換用於 GUI 函數的"當前"窗口.
Hex 返回一個字符串表示的整數或者二進位數的的十六進位數值.
HotKeySet 設置一個可調用某用戶函數的熱鍵.
HttpSetProxy 設置訪問HTTP時使用的代理伺服器.
HttpSetUserAgent Sets the user-agent string sent with InetGet() requests.
HWnd 轉換一個表達式為 HWND 句柄.
InetClose 關閉一個由 InetGet() 返回的句柄.
InetGet 通過HTTP,HTTPS或FTP協議從網際網路上下載指定文件.
InetGetInfo 返回一個由InetGet()函數返回的句柄的詳細信息.
InetGetSize 以字節為單位返回存放在網際網路上的指定文件的大小.
InetRead 通過HTTP,HTTPS或FTP協議從網際網路上下載一個文件.
IniDelete 從某標準配置文件(*.ini)中刪除某個數值.
IniRead 從某標準配置文件(*.ini)中讀取某個數值.
IniReadSection 從某標準配置文件(*.ini)中讀取某個節中的所有關鍵字或值.
IniReadSectionNames 從某標準配置文件(*.ini)中讀取所有欄位的信息.
IniRenameSection 重命名INI文件裡面的欄位.
IniWrite 寫入一個值到標準格式的 .ini 文件.
IniWriteSection 將數據寫入到標準INI文件的一個欄位.
InputBox 顯示以一個輸入框以供用戶輸入數據.
Int 返回某個表達式的整數(整數部分)值.
IsAdmin 檢查當前用戶是否擁有管理員權限.
IsArray 檢查某個變量是否數組類型.
IsBinary 檢查一個變量是否是 binary (二進位)類型.
IsBool 檢查一個變量是否是布爾值類型(boolean).
IsDeclared 檢測某個變量是否已聲明.
IsDllStruct 檢查一個變量是否是 Dll 數據結構類型.
IsFloat 檢測某個變量或表達式是否浮點數.
IsHWnd 檢查一個變量基本類型是否是一個窗口句柄或者指針類型.
IsInt 檢測某個變量或表達式是否整型數.
IsKeyword 檢查一個變量是否是一個關鍵字(例子: Default(默認)).
IsNumber 檢測某個變量是否數字類型數據.
IsObj 檢查一個變量或者表達式是否為對象類型.
IsPtr 檢查一個變量基本類型是否為指針類型.
IsString 檢測某個變量是否字符類型數據.
Log 求某個數的自然對數.
MemGetStats 獲取內存相關信息.
Mod 求模運算.
MouseClick 執行滑鼠點擊操作.
MouseClickDrag 執行滑鼠拖曳操作.
MouseDown 在當前位置產生一個滑鼠按下(按鍵)事件.
MouseGetCursor 返回當前滑鼠指針光標的ID.
MouseGetPos 獲取當前滑鼠的坐標位置.
MouseMove 移動滑鼠指針.
MouseUp 在當前位置產生一個滑鼠釋放(按鍵)事件.
MouseWheel 產生向上或向下滾動滑鼠滾輪事件.僅支持NT/2000/XP及更高.
MsgBox 顯示一個簡單的對話框(可設置超時屬性).
Number 返回某表達式的數值結果.
ObjCreate 創建一個指定的 COM 對象.
ObjEvent 包含一個已經得到的Object(對象)的事件句柄.
ObjGet Retrieves a reference to a COM object from an existing process or filename.
ObjName Returns the name or interface description of an Object
OnAutoItExitRegister Registers a function to be called when AutoIt exits.
OnAutoItExitUnRegister UnRegisters a function that was called when AutoIt exits.
Ping 向指定的遠程主機發送Ping命令並返回收發時間量.
PixelChecksum 生成某區域象素的校驗和.
PixelGetColor 返回指定坐標位置上的象素點的顏色值.
PixelSearch 在指定矩形區域中搜尋與指定顏色值匹配的象素(並返回第一個匹配的象素的坐標).
ProcessClose 結束某個進程.
ProcessExists 檢查指定進程是否存在.
ProcessGetStats 返回一個數組,數組中包含了運行中的進程的內存或者IO信息.
ProcessList 返回當前運行中的進程列表(含有進程名和 PID 值).
ProcessSetPriority 設置某個進程的優先級.
ProcessWait 暫停腳本的執行直至給定進程出現為止.
ProcessWaitClose 暫停腳本的執行直至給定進程不再存在為止.
ProgressOff 關閉進度條窗口.
ProgressOn 創建自定義進度條窗口.
ProgressSet 設置此前創建的進度條窗口的坐標位置,文字等屬性.
Ptr 轉換一個表達式到指針變量.
Random 產生一個偽隨機的浮點數.
RegDelete 從註冊表中刪除指定鍵值.
RegEnumKey 讀取指定子鍵的名稱.
RegEnumVal 讀取指定值項的名稱.
RegRead 讀取註冊表指定的值.
RegWrite 創建一個主鍵,子鍵或值項.
Round 返回某數值精確到指定位的結果.
Run 運行外部程序.
RunAs 使用一個不同的用戶運行一個外部程序文件.
RunAsWait 在不同的用戶環境中運行一個外部程序並暫停腳本執行直到程序結束.
RunWait 運行一個外部程序並暫停腳本的執行直至該程序執行完畢.
Send 向激活窗口發送模擬鍵擊操作.
SendKeepActive 在使用Send()函數時,嘗試保持指定窗口激活狀態.
SetError 設置宏 @error 的值.
SetExtended 設置宏 @extended 的值.
ShellExecute 使用 ShellExecute API 執行一個外部程序.
ShellExecuteWait 使用 ShellExecute API 執行一個外部程序並暫停腳本運行,直到外部程序正常結束.
Shutdown 關機.
Sin 求某個數的正弦值(sine).
Sleep 使腳本暫停指定時間段.
SoundPlay 播放指定的音頻文件.
SoundSetWaveVolume 調整系統波形音量的百分比大小.
SplashImageOn 創建一個自定義的圖片(閃屏/封面)窗口.
SplashOff 關閉閃屏.
SplashTextOn 創建一個自定義的文字(閃屏)窗口.
Sqrt 求某個數的平方根.
SRandom 設置隨機數函數(random)的生成種子數.
StatusbarGetText 獲取標準狀態欄控制項的文本.
StderrRead Reads from the STDERR stream of a previously run child process.
StdinWrite Writes a number of characters to the STDIN stream of a previously run child process.
StdioClose Closes all resources associated with a process previously run with STDIO redirection.
StdoutRead Reads from the STDOUT stream of a previously run child process.
String 返回某表達式的字符串結果.
StringAddCR 在指定字符串的所有換行符( Chr(10) )前附加一個回車( Chr(13) )(ASCII碼).
StringCompare 按選項比較兩個字符串.
StringFormat 返回格式化過後的字符 (與 C 語言的sprintf() 函數相似).
StringFromASCIIArray 轉換一個 ASCII 碼數組到一個字符串.
StringInStr 檢查某個字符串是否含有給定的子串.
StringIsAlNum 檢查某個字符串是否僅含有字母或數字(文字數字式字符).
StringIsAlpha 檢查某個字符串是否僅含有字母(文字字符).
StringIsASCII 檢查某個字符串是否僅含有ASCII碼值介於 0x00 到 0x7f (0-127)之間的字符.
StringIsDigit 檢查某個字符串是否僅含有數字(0-9)字符.
StringIsFloat 檢查某個字符串是否為浮點數.
StringIsInt 檢查某個字符串是否整型數.
StringIsLower 檢查某個字符串是否僅含有小寫字母.
StringIsSpace 檢查某個字符串是否僅含有"空白符".
StringIsUpper 檢查某個字符串是否僅含有大寫字母.
StringIsXDigit 檢查某個字符串是否僅含有十六進位字符(0-9, A-F).
StringLeft 返回字符串中從左開始指定數量的字符.
StringLen 返回指定字符串的字符總數.
StringLower 轉換字符串為小寫字母.
StringMid 取某個字符串的部分字符.
StringRegExp 檢查字串是否符合給定的正則表達式.
StringRegExpReplace 基於正則表達式的文本替換.
StringReplace 替換字符串中的指定子串.
StringRight 返回字符串中從右開始指定數量的字符.
StringSplit 以指定分隔符把字符串拆分成若干子串.
StringStripCR 刪除字符串中的所有回車( Chr(13) ).
StringStripWS 刪去字符串中的所有"空白符".
StringToASCIIArray 轉換一個字符串為包含每個字符的ASCII碼的數組.
StringToBinary 轉換字符串為二進位數據.
StringTrimLeft 刪除字符串中從左開始指定數量的字符.
StringTrimRight 刪除字符串中從右開始指定數量的字符.
StringUpper 轉換字符串為大寫字母.
Tan 求某個數的正切值(tan).
TCPAccept 嘗試接受一個套接字(socket)連接.
TCPCloseSocket 關閉一個 TCP 套接字(socket).
TCPConnect 創建一個套接字(socket)連接到已經存在的伺服器.
TCPListen 創建一個套接字(socket)監聽.
TCPNameToIP 轉換一個網際網路名稱(域名)到一個 IP 地址.
TCPRecv 從已經連接的套接字裡面接收數據.
TCPSend 在已經連接的套接字(socket)上面發送數據.
TCPShutdown, UDPShutdown 停止 TCP/UDP 服務.
TCPStartup, UDPStartup 開始 TCP/UDP 服務.
TimerDiff 返回當前與上一次調用TimerInit()之間的時間間隔.
TimerInit (以毫秒為單位)返回當前時間戳.
ToolTip 在屏幕的任意位置顯示一個工具提示.
TrayCreateItem 在系統託盤上面創建一個菜單項目控制項.
TrayCreateMenu 在系統託盤上面創建一個菜單控制項.
TrayGetMsg 得到一個系統託盤圖標項目產生的事件.
TrayItemDelete 刪除一個系統託盤圖標裡面的 菜單/菜單項目 控制項.
TrayItemGetHandle 返回一個系統託盤圖標裡面的 菜單/項目 控制項的句柄.
TrayItemGetState 得到當前系統託盤項目控制項的狀態.
TrayItemGetText 得到系統託盤圖標裡面的 菜單/項目 控制項的文本.
TrayItemSetOnEvent 當菜單項目被點擊,執行一個用戶自定義函數.
TrayItemSetState 設置當前系統託盤項目控制項的狀態.
TrayItemSetText 設置託盤圖標的託盤 菜單/項目 控制項的項目文本.
TraySetClick 設置滑鼠在系統託盤圖標裡面的點擊模式 - 怎樣的滑鼠點擊才會顯示系統託盤的菜單.
TraySetIcon 載入/設置 指定的系統託盤圖標.
TraySetOnEvent 當系統託盤發生一個特殊事件就執行一個用戶自定義函數.
TraySetPauseIcon 載入/設置 指定的託盤暫停圖標(腳本暫停時顯示).
TraySetState 設置系統託盤圖標狀態.
TraySetToolTip (重新)設置託盤圖標的工具(氣泡)提示文本.
TrayTip 在託盤圖標上顯示一個氣球提示 (僅支持2000/XP)
UBound 返回數組維度的大小.
UDPBind 創建一個引入連接的套接字(socket)綁定.
UDPCloseSocket 關閉一個 UDP 套接字(socket).
UDPOpen 打開一個套接字(socket)連接到一個存在的伺服器.
UDPRecv 從已經連接的套接字裡面接收數據.
UDPSend 在打開的套接字(socket)上面發送數據.
VarGetType 返回一個變量的AutoIt內部表示類型.
WinActivate 激活指定的窗口(設置焦點到該窗口,使其成為活動窗口).
WinActive 檢查指定的窗口是否存在且當前被激活.
WinClose 關閉指定窗口.
WinExists 檢查指定的窗口是否存在.
WinFlash 閃爍任務欄上面的窗口標題.
WinGetCaretPos 返回頂層窗口的插入符的坐標位置.
WinGetClassList 獲取指定窗口的所有控制項類的列表.
WinGetClientSize 獲取指定窗口的客戶區的大小信息.
WinGetHandle 獲取指定窗口的內部句柄.
WinGetPos 獲取指定窗口的坐標位置和大小等屬性.
WinGetProcess 獲取指定窗口關聯的進程ID(PID).
WinGetState 獲取指定窗口的狀態.
WinGetText 獲取指定窗口中的文本.
WinGetTitle 獲取指定窗口的完整標題名.
WinKill 強行關閉指定窗口.
WinList 獲取窗口列表.
WinMenuSelectItem 調用窗口中的某個菜單項目.
WinMinimizeAll 最小化全部窗口.
WinMinimizeAllUndo 撤銷此前的 WinMinimizeAll 的效果.
WinMove 移動指定的窗口或調整窗口的大小.
WinSetOnTop 設置指定窗口的"總是在頂層"屬性.
WinSetState 顯示,隱藏,最小化,最大化或還原一個窗口.
WinSetTitle 修改指定窗口的標題.
WinSetTrans 設置指定窗口的透明度(僅支持Windows 2000/XP或更高版本)
WinWait 暫停腳本的執行直至指定窗口存在(出現)為止.
WinWaitActive 暫停腳本的執行直至指定窗口被激活(成為活動狀態)為止.
WinWaitClose 暫停腳本的執行直至所指定窗口不再存在為止.
WinWaitNotActive 暫停腳本的執行直至指定窗口不是激活狀態為止.
三、軟體安裝:
autoit3安裝後會有以下幾個子工具:
主要看這個工具:
AutoIt3.exeAutoIt 的主程序,腳本文件 僅需 它即可得以解釋運行!AU3Info.exeAutoIt窗口信息工具,用來獲取WINDOWS工具的窗口的信息,比如:
AutoIt.chm幫助文件。script編輯工具AU3Info.exe這個工具很重要,它能獲取:
通過上述信息可以進行對控制項進行操作,比如下面這個界面的輸入框:
四、示例:
近期用AUTOIT作了夜間清算、軟體升級的自動化操作。
其中軟體升級比較簡單,需求是要對50臺操作終端的商業軟體(沒有接口可調)進行軟體升級,並進行補丁升級,中間還涉及配置一些可信文件夾以免被病毒軟體刪除補丁程序。
註:由於有些軟體非標準的WINDOWS控制項,所以只能通常坐標方式定位到控制項,實際執行過程中最好通過控制句柄等唯一信息進行定位.。
DirCopy ( "WindowsLoader","D:\WindowsLoader")
sleep(10000)
Run("D:\WindowsLoader\tttt.exe")
WinWaitActive("C:\Windows\system32\cmd.exe")
MouseClick("left",373, 430, 1)
Send("{ENTER}")
sleep(5000)
sleep(5000)
Send("{ENTER}")
Send("{ENTER}")
sleep(5000)
Run("D:\WindowsLoader\bbbb.exe")
WinWaitActive("bbbbb")
MouseClick("left",767, 502, 1)
sleep(5000)
MouseClick("left",1086, 746, 1)
sleep(240000)
MouseClick("left",1156, 741, 1)
MouseClick("left",1077, 584, 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MouseClick("left",1814, 1060, 2)
WinWaitActive("狀態 - Symantec Endpoint Protection")
Sleep(1000)
MouseClick("left",588, 417, 1)
MouseClick("left",1314, 517, 1)
WinWaitActive("例外")
MouseClick("left",724, 693, 1)
Sleep(1000)
MouseClick("left",735, 699, 1)
Sleep(1000)
MouseClick("left",846, 752, 1)
WinWaitActive("瀏覽文件夾")
Sleep(1000)
ControlSetText("瀏覽文件夾", "添加安全風險文件夾例外", "Edit1", "D:\WindowsLoader\" )
Sleep(3000)
MouseClick("left",989, 688, 1)
Sleep(1000)
MouseClick("left",1130, 728, 1)
Sleep(1000)
MouseClick("left",1397, 266, 1)
Sleep(1000)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RunWait('C:\Program Files (x86)\WinRAR\WinRAR.exe x -ad D:\WindowsLoader\aaaa.zip D:\WindowsLoader\')
Sleep(30000)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Run("D:\WindowsLoader\aaaa.exe")
Sleep(2000)
WinWaitActive("aaaa")
MouseClick("left",1101, 605, 1)