AutoIt v3 是用以编写并生成具有 BASIC 语言风格的脚本程序的免费软件,它被设计用来在Windows GUI(用户界面)中进行自动操作.通过它可以组合使用模拟键击,鼠标移动和窗口/控件操作等来实现自动化任务,而这是其它语言所无法做到或尚无可靠方法实现的(比如VBScript和SendKeys). AutoIt 非常小巧,完全运行在所有windows操作系统上.并且不需要任何"运行库".
AutoIt 最初是为PC(个人电脑)的"批量处理"而设计,用于对数千台PC进行(同样的)配置.现在,autoit是一个支持复杂表达式,自定义函数,循环等的强大脚本软件. AutoIt 可以做的事:
AutoIt 被设计得尽可能小,并且不用依赖外部DLL文件或添加注册表项目即可独立运行.也可以安全的成为服务运行.脚本可以使用Aut2Exe编译为可独立运行的文件。
下载链接:https://www.autoitscript.com/site/autoit/downloads/
在线文档:http://www.autoitx.com/Doc/
官网:https://www.autoitscript.com/site/autoit/
基本函数:
MsgBox:
#include <Constants.au3>
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "This is line 1" & @CRLF & "This is line 2" & @CRLF & "This is line 3")
Do....Until,If ....Then....EndIf:
#include <Constants.au3>
Local $iAnswer = MsgBox(BitOR($MB_YESNO, $MB_SYSTEMMODAL), "AutoIt Example", "This script will count to 5 using a 'Do' loop. Do you want to run it?")
If $iAnswer = 7 Then
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "OK. Bye!")
Exit
EndIf
Local $iCount = 1
Do
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Count is: " & $iCount)
$iCount = $iCount + 1 ; Alternatively $iCount += 1 can be used to increase the value of $iCount by one
Until $iCount > 5
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Finished!")
For....Next:
#include <Constants.au3>
Local $iAnswer = MsgBox(BitOR($MB_YESNO, $MB_SYSTEMMODAL), "AutoIt Example", "This script will count to 5 using a 'For' loop. Do you want to run it?")
If $iAnswer = 7 Then
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "OK. Bye!")
Exit
EndIf
For $iCount = 1 To 5
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Count is: " & $iCount)
Next
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Finished!")
While....WEnd:
#include <Constants.au3>
Local $iAnswer = MsgBox(BitOR($MB_YESNO, $MB_SYSTEMMODAL), "AutoIt Example", "This script will count to 5 using a 'While' loop. Do you want to run it?")
If $iAnswer = 7 Then
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "OK. Bye!")
Exit
EndIf
Local $iCount = 0
While $iCount < 5
$iCount = $iCount + 1 ; Alternatively $iCount += 1 can be used to increase the value of $iCount by one
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Count is: " & $iCount)
WEnd
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Finished!")
Func....EndFunc:
#include <Constants.au3>
Local $iAnswer = MsgBox(BitOR($MB_YESNO, $MB_SYSTEMMODAL), "AutoIt Example", "This script will call a couple of example functions. Do you want to run it?")
If $iAnswer = 7 Then
MsgBox($MB_SYSTEMMODAL, "AutoIt", "OK. Bye!")
Exit
EndIf
TestFunc1()
TestFunc2(20)
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Finished!")
Exit
Func TestFunc1()
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Inside TestFunc1()")
EndFunc
Func TestFunc2($vVar)
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "Inside TestFunc2() - $vVar is: " & $vVar)
EndFunc
InputBox:
#include <Constants.au3>
Local $iAnswer = MsgBox(BitOR($MB_YESNO, $MB_SYSTEMMODAL), "AutoIt Example (English Only)", "This script will open an input box and get you to type in some text. Do you want to run it?")
If $iAnswer = 7 Then
MsgBox($MB_SYSTEMMODAL, "AutoIt", "OK. Bye!")
Exit
EndIf
Local $iLoop = 1, $sText = ""
While $iLoop = 1
$sText = InputBox("AutoIt Example", "Please type in the word ""autoit"" and click OK")
If @error = 1 Then
MsgBox($MB_SYSTEMMODAL, "Error", "You pressed 'Cancel' - try again!")
Else
If $sText <> "autoit" Then
MsgBox($MB_SYSTEMMODAL, "Error", "You typed in the wrong thing - try again!")
Else
$iLoop = 0
EndIf
EndIf
WEnd
MsgBox($MB_SYSTEMMODAL, "AutoIt Example", "You typed in the correct word! Congrats.")
Run操作txt:
#include <Constants.au3>
Local $iAnswer = MsgBox(BitOR($MB_YESNO, $MB_SYSTEMMODAL), "AutoIt Example", "This script will run Notepad, type in some text and then quit. Do you want to run it?")
If $iAnswer = 7 Then
MsgBox($MB_SYSTEMMODAL, "AutoIt", "OK. Bye!")
Exit
EndIf
Run("notepad.exe")
WinWaitActive("[CLASS:Notepad]")
Send("Hello from Notepad.{ENTER}1 2 3 4 5 6 7 8 9 10{ENTER}")
Sleep(500)
Send("+{UP 2}")
Sleep(500)
Send("!f")
Sleep(1000)
Send("{DOWN 6}{ENTER}")
WinWaitActive("[CLASS:#32770]")
Sleep(500)
Send("{TAB}{ENTER}")
WinWaitClose("[CLASS:Notepad]")
MouseClick:
; Double click at the current mouse position.
MouseClick("left")
MouseClick("left")
; Double click at the x, y position of 0, 500.
MouseClick("left", 0, 500, 2)
; Double click at the x, y position of 0, 500. This is a better approach as it takes into account left/right handed users.
MouseClick("primary", 0, 500, 2)
Send:
Example()
Func Example()
; Simulate the key combination Win + R to open the Run dialogue window.
Send("#r")
; Wait 10 seconds for the Run dialogue window to appear.
WinWait("Run", "", 10)
; Simulate entering notepad.exe and pressing the 'ENTER' key.
Send("notepad.exe{Enter}")
; Wait 10 seconds for the Notepad window to appear.
Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
; Simulate entering the following string and pressing the 'F5' key to input the date and time into edit control of Notepad.
Send("Today's time/date is {F5}")
; Close the Notepad window using the handle returned by WinWait.
WinClose($hWnd)
; Now a screen will pop up and ask to save the changes, the classname of the window is called
; "#32770" and simulating the "TAB" key to move to the second button in which the "ENTER" is simulated to not "save the file"
WinWaitActive("[CLASS:#32770]")
Sleep(500)
Send("{TAB}{ENTER}")
EndFunc ;==>Example
ClipPut:
ClipPut("我被拷贝到剪贴板")
;打开记事本,右键粘贴,看看有什么!
HotKeySet:
; 按Esc键终止脚本, 按Pause/Break键暂停
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ;Shift-Alt-d
;;;; 下面是程序正文 ;;;;
While 1
Sleep(100)
WEnd
;;;;;;;;
Func TogglePause()
$Paused = Not $Paused
While $Paused
Sleep(100)
ToolTip('脚本已经"暂停"了',0,0)
WEnd
ToolTip("")
EndFunc ;==>TogglePause
Func Terminate()
Exit 0
EndFunc ;==>Terminate
Func ShowMessage()
MsgBox(4096,"标题","这是一个消息.")
EndFunc ;==>ShowMessage
AutoItSetOption:
; 可直接复制所需语句到脚本中 ;最先列出的是各项属性的默认值
AutoItSetOption("CaretCoordMode", 1) ;1=绝对位置, 0=相对位置, 2=客户区
AutoItSetOption("ExpandEnvStrings", 0) ;0=不展开, 1=展开
AutoItSetOption("ExpandVarStrings", 0) ;0=不展开, 1=展开
AutoItSetOption("GUICloseOnESC", 1) ;1=按下 ESC 将关闭窗口, 0=按下 ESC 将不关闭窗口
AutoItSetOption("GUICoordMode", 1) ;1=绝对位置, 0=相对位置, 2=单元格
AutoItSetOption("GUIDataSeparatorChar","|") ;"|"为默认
AutoItSetOption("GUIOnEventMode", 0) ;0=取消, 1=启用 OnEvent 模式
AutoItSetOption("GUIResizeMode", 0) ;0=不调整, <1024 特定的调整值
AutoItSetOption("GUIEventAutoItSetOptionions",0) ;0=默认, 1=立即通知, 2=GuiCtrlRead 标签索引
AutoItSetOption("MouseClickDelay", 10) ;10 毫秒
AutoItSetOption("MouseClickDownDelay", 10) ;10 毫秒
AutoItSetOption("MouseClickDragDelay", 250) ;250 毫秒
AutoItSetOption("MouseCoordMode", 1) ;1=绝对位置, 0=相对位置, 2=客户区
AutoItSetOption("MustDeclareVars", 0) ;0=无需声明变量, 1=需要预先声明
AutoItSetOption("PixelCoordMode", 1) ;1=绝对位置, 0=相对位置, 2=客户区
AutoItSetOption("SendAttachMode", 0) ;0=不捆绑, 1=捆绑
AutoItSetOption("SendCapslockMode", 1) ;1=保存并恢复, 0=不保存
AutoItSetOption("SendKeyDelay", 5) ;5 毫秒
AutoItSetOption("SendKeyDownDelay", 1) ;1 毫秒
AutoItSetOption("TCPTimeout",100) ;100 毫秒
AutoItSetOption("TrayAutoPause",1) ;0=不暂停, 1=暂停
AutoItSetOption("TrayIconDebug", 0) ;0=无信息, 1=调试信息
AutoItSetOption("TrayIconHide", 0) ;0=显示, 1=隐藏托盘图标
AutoItSetOption("TrayMenuMode",0) ;0=扩展, 1=没有默认菜单, 2=没有自动 check, 4=菜单项目ID 不返回
AutoItSetOption("TrayOnEventMode",0) ;0=关闭, 1=启用
AutoItSetOption("WinDetectHiddenText", 0) ;0=不检测, 1=检测
AutoItSetOption("WinSearchChildren", 1) ;0=不搜索, 1=搜索子窗口
AutoItSetOption("WinTextMatchMode", 1) ;1=完全匹配, 2=快速匹配
AutoItSetOption("WinTitleMatchMode", 1) ;1=开头, 2=子串, 3=完全, 4=高级 , -1 to -4=Nocase
AutoItSetOption("WinWaitDelay", 250) ;250 毫秒
WinWaitActive:
Run("notepad.exe")
WinWaitActive("[CLASS:Notepad]")
Send("!{tab}")
Sleep(1000)
WinActivate("[CLASS:Notepad]", "")
WinSetState:
Example()
Func Example()
; Run Notepad
Run("notepad.exe")
; Wait 10 seconds for the Notepad window to appear.
Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
; Set the state of the Notepad window to "hide".
WinSetState($hWnd, "", @SW_HIDE)
; Wait for 2 seconds.
Sleep(2000)
; Set the state of the Notepad window to "show".
WinSetState($hWnd, "", @SW_SHOW)
; Wait for 2 seconds.
Sleep(2000)
; Close the Notepad window using the handle returned by WinWait.
WinClose($hWnd)
EndFunc ;==>Example
2demos:
获取计算机已安装程序列表:
#include <Constants.au3>
$file = FileOpen(@ScriptDir&"\RegInstalledItems.csv",1)
if $file = -1 Then
ConsoleWrite("ERROR: Unable to write to the output file")
Exit
EndIf
$i = 1
While not @error
$var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i)
If @error <> 0 then ExitLoop
;MsgBox(4096, "SubKey #" & $i & " under HKLM\Software: ", $var)
$var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"&$var,"DisplayName")
;MsgBox(0,"Val",$var2)
$outLine = $var&","&$var2
FileWriteLine($file,$outLine)
$i += 1
WEnd
FileClose($file)
获取计算机信息:
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
_Main()
Func _Main()
Local $sVOL, $sSERIAL, $sTOTAL, $sFREE
Local $idInput_ComputerName, $idInput_CurrentUserName, $idInput_OperatingSystem
Local $idInput_ServicePack, $idInput_VolumeLabel, $idInput_SerialNumber
Local $idInput_TotalSpace, $idInput_FreeSpace, $idInput_IpAddress, $idInput_StartupDirectory
Local $idInput_WindowsDirectory, $idInput_SystemFolderDirectory, $idInput_DesktopDirectory
Local $idInput_MyDocumentsDirectory, $idInput_ProgramFilesDirectory, $idInput_StartMenuDirectory
Local $idInput_TemporaryFileDirectory, $idInput_DesktopWidth, $idInput_DesktopHeight
Local $idInput_Date, $idInput_Time, $iMsg
#forceref $idInput_ComputerName, $idInput_CurrentUserName, $idInput_OperatingSystem
#forceref $idInput_ServicePack, $idInput_VolumeLabel, $idInput_SerialNumber
#forceref $idInput_TotalSpace, $idInput_FreeSpace, $idInput_IpAddress, $idInput_StartupDirectory
#forceref $idInput_WindowsDirectory, $idInput_SystemFolderDirectory, $idInput_DesktopDirectory
#forceref $idInput_MyDocumentsDirectory, $idInput_ProgramFilesDirectory, $idInput_StartMenuDirectory
#forceref $idInput_TemporaryFileDirectory, $idInput_DesktopWidth, $idInput_DesktopHeight
#forceref $idInput_Date, $idInput_Time
GUICreate("Computer Information - By : Para", 469, 639, (@DesktopWidth - 469) / 2, (@DesktopHeight - 639) / 2, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)
$sVOL = DriveGetLabel("C:\")
$sSERIAL = DriveGetSerial("C:\")
$sTOTAL = DriveSpaceTotal("C:\")
$sFREE = DriveSpaceFree("C:\")
GUICtrlCreateLabel("Computer Name", 10, 10, 150, 20)
GUICtrlCreateLabel("Current User Name", 10, 40, 150, 20)
GUICtrlCreateLabel("Operating System", 10, 70, 150, 20)
GUICtrlCreateLabel("Service Pack", 10, 100, 150, 20)
GUICtrlCreateLabel("C: Volume Label", 10, 130, 150, 20)
GUICtrlCreateLabel("C: Serial Number", 10, 160, 150, 20)
GUICtrlCreateLabel("C: Total Space", 10, 190, 150, 20)
GUICtrlCreateLabel("C: Free Space", 10, 220, 150, 20)
GUICtrlCreateLabel("Ip Address", 10, 250, 150, 20)
GUICtrlCreateLabel("Startup Directory", 10, 280, 150, 20)
GUICtrlCreateLabel("Windows Directory", 10, 310, 150, 20)
GUICtrlCreateLabel("System Folder Directory", 10, 340, 150, 20)
GUICtrlCreateLabel("Desktop Directory", 10, 370, 150, 20)
GUICtrlCreateLabel("My Documents Directory", 10, 400, 150, 20)
GUICtrlCreateLabel("Program File Directory", 10, 430, 150, 20)
GUICtrlCreateLabel("Start Menu Directory", 10, 460, 150, 20)
GUICtrlCreateLabel("Desktop Width (Pixels)", 10, 520, 150, 20)
GUICtrlCreateLabel("Temporary File Directory", 10, 490, 150, 20)
GUICtrlCreateLabel("Desktop Height (Pixels)", 10, 550, 150, 20)
GUICtrlCreateLabel("Date", 10, 580, 150, 20)
GUICtrlCreateLabel("Time", 10, 610, 150, 20)
$idInput_ComputerName = GUICtrlCreateInput("" & @ComputerName, 180, 10, 280, 20)
$idInput_CurrentUserName = GUICtrlCreateInput("" & @UserName, 180, 40, 280, 20)
$idInput_OperatingSystem = GUICtrlCreateInput("" & @OSType, 180, 70, 280, 20)
$idInput_ServicePack = GUICtrlCreateInput("" & @OSServicePack, 180, 100, 280, 20)
$idInput_VolumeLabel = GUICtrlCreateInput("" & $sVOL, 180, 130, 280, 20)
$idInput_SerialNumber = GUICtrlCreateInput("" & $sSERIAL, 180, 160, 280, 20)
$idInput_TotalSpace = GUICtrlCreateInput("" & $sTOTAL, 180, 190, 280, 20)
$idInput_FreeSpace = GUICtrlCreateInput("" & $sFREE, 180, 220, 280, 20)
$idInput_IpAddress = GUICtrlCreateInput("" & @IPAddress1, 180, 250, 280, 20)
$idInput_StartupDirectory = GUICtrlCreateInput("" & @StartupDir, 180, 280, 280, 20)
$idInput_WindowsDirectory = GUICtrlCreateInput("" & @WindowsDir, 180, 310, 280, 20)
$idInput_SystemFolderDirectory = GUICtrlCreateInput("" & @SystemDir, 180, 340, 280, 20)
$idInput_DesktopDirectory = GUICtrlCreateInput("" & @DesktopDir, 180, 370, 280, 20)
$idInput_MyDocumentsDirectory = GUICtrlCreateInput("" & @MyDocumentsDir, 180, 400, 280, 20)
$idInput_ProgramFilesDirectory = GUICtrlCreateInput("" & @ProgramFilesDir, 180, 430, 280, 20)
$idInput_StartMenuDirectory = GUICtrlCreateInput("" & @StartMenuDir, 180, 460, 280, 20)
$idInput_TemporaryFileDirectory = GUICtrlCreateInput("" & @TempDir, 180, 490, 280, 20)
$idInput_DesktopWidth = GUICtrlCreateInput("" & @DesktopWidth, 180, 520, 280, 20)
$idInput_DesktopHeight = GUICtrlCreateInput("" & @DesktopHeight, 180, 550, 280, 20)
$idInput_Date = GUICtrlCreateInput("(MONTH)(DAY)(YEAR) " & @MON & "-" & @MDAY & "-" & @YEAR, 180, 580, 280, 20)
$idInput_Time = GUICtrlCreateInput("(HOUR)(MIN)(SEC) " & @HOUR & ":" & @MIN & ":" & @SEC, 180, 610, 280, 20)
GUISetState()
While 1
$iMsg = GUIGetMsg()
Select
Case $iMsg = $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;
EndSelect
WEnd
Exit
EndFunc ;==>_Main