- 介绍
- 特别声明(Special Announcement)
- 安装目录结构
- 常见问题解答 (FAQ)
- 运行脚本
- 脚本编辑器
- 使用Aut2Exe编译脚本
- AutoIt 窗口信息工具
- 窗口标题与文本(基础篇)
- 窗口标题与文本(高级篇)
- Controls
- Intended Use
- AutoIt v2 用户须知
- 指南 - HelloWorld
- 指南 - 记事本(Notepad)
- 指南 - WinZip
- Language Reference
- Language Reference - Datatypes
- Language Reference - Variables
- Language Reference - Macros
- Language Reference - Operators
- Language Reference - Conditional Statements
- Language Reference - Loops Statements
- Language Reference - User Functions
- Language Reference - Comments
- GUI Reference
- GUI Reference - MessageLoop Mode
- GUI 相关 - OnEvent 模式
- Keywords
- Keyword #comments-start
- Keyword #include
- Keyword #include-once
- Keyword #NoTrayIcon
- Keyword Dim / Global / Local / Const
- Keyword ContinueLoop
- Keyword Do...Until
- Keyword Exit
- Keyword ExitLoop
- Keyword For...Next
- Keyword Func...Return...EndFunc
- Keyword If...Then
- Keyword If...ElseIf...Else...EndIf
- Keyword ReDim
- Keyword Select...Case...EndSelect
- Keyword While...WEnd
- Macros
- 宏列表-AutoIt相关
- Macro Reference - Directory
- Macro Reference - System Info
- Macro Reference - Time And Date
- 函数(Functions)
- 使用函数时的注意事项
- Function ClipGet
- Function ClipPut
- Function EnvGet
- Function EnvSet
- Function EnvUpdate
- Function MemGetStats
- Function DirCopy
- Function DirCreate
- Function DirGetSize
- Function DirMove
- Function DirRemove
- Function DriveGetDrive
- Function DriveGetFileSystem
- Function DriveGetLabel
- Function DriveGetSerial
- Function DriveGetType
- Function DriveMapAdd
- Function DriveMapDel
- Function DriveMapGet
- Function DriveSetLabel
- Function DriveSpaceFree
- Function DriveSpaceTotal
- Function DriveStatus
- Function FileChangeDir
- Function FileClose
- Function FileCopy
- Function FileCreateShortcut
- Function FileDelete
- Function FileExists
- Function FileFindFirstFile
- Function FileFindNextFile
- Function FileGetAttrib
- Function FileGetLongName
- Function FileGetShortcut
- Function FileGetShortName
- Function FileGetSize
- Function FileGetTime
- Function FileGetVersion
- Function FileInstall
- Function FileMove
- Function FileOpen
- Function FileOpenDialog
- Function FileRead
- Function FileReadLine
- Function FileRecycle
- Function FileRecycleEmpty
- Function FileSaveDialog
- Function FileSelectFolder
- Function FileSetAttrib
- Function FileSetTime
- Function FileWrite
- Function FileWriteLine
- Function IniDelete
- Function IniRead
- Function IniReadSection
- Function IniReadSectionNames
- Function IniWrite
- Function AutoItSetOption
- Function PixelChecksum
- Function PixelGetColor
- Function PixelSearch
- Function SoundPlay
- Function SoundSetWaveVolume
- GUI Reference
- Function GUICreate
- Functions
- Function GUICtrlCreateAvi
- Function GUICtrlCreateButton
- Function GUICtrlCreateCheckbox
- Function GUICtrlCreateCombo
- Function GUICtrlCreateContextMenu
- Function GUICtrlCreateDate
- Function GUICtrlCreateDummy
- Function GUICtrlCreateEdit
- Function GUICtrlCreateGroup
- Function GUICtrlCreateIcon
- Function GUICtrlCreateInput
- Function GUICtrlCreateLabel
- Function GUICtrlCreateList
- Function GUICtrlCreateListView
- Function GUICtrlCreateListViewItem
- Function GUICtrlCreateMenu
- Function GUICtrlCreateMenuitem
- Function GUICtrlCreatePic
- Function GUICtrlCreateProgress
- Function GUICtrlCreateRadio
- Function GUICtrlCreateSlider
- Function GUICtrlCreateTab
- Function GUICtrlCreateTabItem
- Function GUICtrlCreateTreeView
- Function GUICtrlCreateTreeViewItem
- Function GUICtrlCreateUpdown
- Function GUICtrlDelete
- Functions
- Function GUICtrlSetBkColor
- Function GUICtrlSetColor
- Function GUICtrlSetCursor
- Function GUICtrlSetData
- Function GUICtrlSetFont
- Function GUICtrlSetImage
- Function GUICtrlSetLimit
- Function GUICtrlSetOnEvent
- Function GUICtrlSetPos
- Function GUICtrlSetResizing
- Function GUICtrlSetState
- Function GUICtrlSetStyle
- Function GUICtrlSetTip
- Functions
- Function GUISetBkColor
- Function GUISetCoord
- Function GUISetCursor
- Function GUISetFont
- Function GUISetHelp
- Function GUISetIcon
- Function GUISetOnEvent
- Function GUISetState
- Function GUIDelete
- Function GUICtrlGetState
- Function GUICtrlRead
- Function GUICtrlRecvMsg
- Function GUICtrlSendMsg
- Function GUICtrlSendToDummy
- Function GUIGetCursorInfo
- Function GUIGetMsg
- Function GUIStartGroup
- Function GUISwitch
- Function HotKeySet
- Function Send
- Function Abs
- Function ACos
- Function ASin
- Function ATan
- Function BitAND
- Function BitNOT
- Function BitOR
- Function BitShift
- Function BitXOR
- Function Cos
- Function Exp
- Function Log
- Function Mod
- Function Random
- Function Round
- Function Sin
- Function Sqrt
- Function Tan
- Function InputBox
- Function MsgBox
- Function ProgressOff
- Function ProgressOn
- Function ProgressSet
- Function SplashImageOn
- Function SplashOff
- Function SplashTextOn
- Function ToolTip
- Function TrayTip
- Function AdlibDisable
- Function AdlibEnable
- Function AutoItSetOption
- Function AutoItWinGetTitle
- Function AutoItWinSetTitle
- Function BlockInput
- Function Break
- Function Call
- Function CDTray
- Function ConsoleWrite
- Function SetError
- Function SetExtended
- Function MouseClick
- Function MouseClickDrag
- Function MouseDown
- Function MouseGetCursor
- Function MouseGetPos
- Function MouseMove
- Function MouseUp
- Function MouseWheel
- Function FtpSetProxy
- Function HttpSetProxy
- Function InetGet
- Function InetGetSize
- Function Ping
- Function DllCall
- Function DllClose
- Function DllOpen
- Function ProcessClose
- Function ProcessExists
- Function ProcessSetPriority
- Function ProcessList
- Function ProcessWait
- Function ProcessWaitClose
- Function Run
- Function RunAsSet
- Function RunWait
- Function Shutdown
- Function RegDelete
- Function RegEnumKey
- Function RegEnumVal
- Function RegRead
- Function RegWrite
- Function StringAddCR
- Function StringInStr
- Function StringIsAlNum
- Function StringIsAlpha
- Function StringIsASCII
- Function StringIsDigit
- Function StringIsFloat
- Function StringFormat
- Function StringIsInt
- Function StringIsLower
- Function StringIsSpace
- Function StringIsUpper
- Function StringIsXDigit
- Function StringLeft
- Function StringLen
- Function StringLower
- Function StringMid
- Function StringReplace
- Function StringRight
- Function StringSplit
- Function StringStripCR
- Function StringStripWS
- Function StringTrimLeft
- Function StringTrimRight
- Function StringUpper
- Function Sleep
- Function TimerInit
- Function TimerDiff
- Function Asc
- Function Chr
- Function Assign
- Function Dec
- Function Eval
- Function Hex
- Function Int
- Function IsAdmin
- Function IsArray
- Function IsDeclared
- Function IsFloat
- Function IsInt
- Function IsNumber
- Function IsString
- Function Number
- Function String
- Function UBound
- Function ControlClick
- Function ControlCommand
- Function ControlDisable
- Function ControlEnable
- Function ControlFocus
- Function ControlGetFocus
- Function ControlGetHandle
- Function ControlGetPos
- Function ControlGetText
- Function ControlHide
- Function ControlListView
- Function ControlMove
- Function ControlSend
- Function ControlSetText
- Function ControlShow
- Function StatusbarGetText
- Function WinActivate
- Function WinActive
- Function WinClose
- Function WinExists
- Function WinGetCaretPos
- Function WinGetClassList
- Function WinGetClientSize
- Function WinGetHandle
- Function WinGetPos
- Function WinGetProcess
- Function WinGetState
- Function WinGetText
- Function WinGetTitle
- Function WinKill
- Function WinList
- Function WinMenuSelectItem
- Function WinMinimizeAll
- Function WinMinimizeAllUndo
- Function WinMove
- Function WinSetOnTop
- Function WinSetState
- Function WinSetTitle
- Function WinSetTrans
- Function WinWait
- Function WinWaitActive
- Function WinWaitClose
- Function WinWaitNotActive
- User Defined Functions
- 自定义函数的注意事项(Function Notes)
- Function _ArrayAdd
- Function _ArrayBinarySearch
- Function _ArrayCreate
- Function _ArrayDelete
- Function _ArrayDisplay
- Function _ArrayInsert
- Function _ArrayMax
- Function _ArrayMaxIndex
- Function _ArrayMin
- Function _ArrayMinIndex
- Function _ArrayPop
- Function _ArrayReverse
- Function _ArraySort
- Function _ArraySwap
- Function _ArrayToClip
- Function _ArrayToString
- Function _ArrayTrim
- Function _ColorGetBlue
- Function _ColorGetGreen
- Function _ColorGetRed
- Function _DateAdd
- Function _DateDayOfWeek
- Function _DateDaysInMonth
- Function _DateDiff
- Function _DateIsLeapYear
- Function _DateIsValid
- Function _DateTimeFormat
- Function _DateToDayValue
- Function _DateToDayOfWeek
- Function _DateToDayValue
- Function _DayValueToDate
- Function _Now
- Function _NowCalc
- Function _NowCalcDate
- Function _NowDate
- Function _NowTime
- Function _TicksToTime
- Function _TimeToTicks
- Function _FileCountLines
- Function _FileCreate
- Function _FileReadToArray
- Function _FileWriteLog
- Function _TempFile
- Function _GetIP
- Function _INetExplorerCapable
- Function _INetMail
- Function _Ceil
- Function _Floor
- Function _MathCheckDiv
- Function _Max
- Function _Min
- Function _Iif
- Function _RunDos
- Function _HexToString
- Function _StringEncrypt
- Function _StringProper
- Function _StringRepeat
- Function _StringReverse
- Function _StringToHex
- Function _viOpen
- Function _viExecCommand
- Function _viFindGpib
- Function _viGpibBusReset
- Function _viGTL
- Function _viOpen
- Function _viSetAttribute
- Function _viSetTimeout
- Language Reference
- ASCII Characters
- CLSID List
- Standard Windows Fonts
- 标准 Windows 字体
- Language Codes
- Send 命令的可用按键列表
GUI 相关 - OnEvent 模式
在 OnEvent(事件驱动)模式下,脚本并不需要频繁地要求GUI检查是否有任何事件发生(并根据返回信息处理事件),而是仅当某个事件发生时GUI才临时性暂停脚本并调用一个用户预定义的函数来处理该事件。例如,假定用户点击了按钮1则GUI将暂停主脚本并调用某个预定义的用户函数来处理按钮1事件。当该函数完成处理操作后才回到主脚本继续执行。这个模式比较类似 Visual Basic 的窗体方法。
当GUI被执行时,主脚本还可以做其它一般性工作,但为了演示方便我们只是让主脚本在一个无限While循环里“睡眠”一下。
因为消息循环是默认的模式,所以在应用 OnEvent 模式之前我们应该先使用 Opt("GUIOnEventMode", 1) 语句。
基本的 OnEvent 结构
下面是 OnEvent 的基本结构:
While 1
Sleep(1000) ; 闲置工作,不做任何事
WEnd
Func Event1()
; 处理事件的代码放在这里
EndFunc
Func Event2()
; 处理事件的代码放在这里
EndFunc
GUI 事件
在 OnEvent 模式下会产生两种“事件”:
这两种事件类型发生时都将调用用户预先定义的函数,这些函数可以是为GUI(窗口)设置的(GUISetOnEvent)或者为控件设置的(GUICtrlSetOnEvent)。如果某事件并没有预先定义相应的处理函数则该事件将被忽略。在这些被调用的函数内部可使用各种 宏 以助处理事件:
宏 | 说明 |
@GUI_CTRLID | 发送消息的控件ID 或者 系统事件ID |
@GUI_WINHANDLE | 发送消息的GUI(窗口)句柄 |
@GUI_CTRLHANDLE | 发送消息的控件句柄(如果适用) |
注意:使用同一个函数来响应多种事件是完全合法的,记住要灵活使用 @GUI_CTRLID 这个宏。比如说,您可以注册所有系统事件到同一个函数。
控件
当某个控件被点击或该控件有其它变化时将发送控件事件。该事件将被传递到由 GUICtrlSetOnEvent 定义的函数中。在这个函数里,@GUI_CTRLID 的值是发送消息的 控件ID(也即使用 GUICtrlCreate... 函数创建该控件时的返回值)。
系统事件
系统事件包括GUI(窗口)被关闭等在内,它们以类似于控件事件的方式被发送出去,而事件类型(ID)则由 @GUI_CTRLID 指示。系统事件将被传递到由 GUISetOnEvent 定义的函数中。可能的系统事件包括:
$GUI_EVENT_CLOSE
$GUI_EVENT_MINIMIZE
$GUI_EVENT_RESTORE
$GUI_EVENT_MAXIMIZE
$GUI_EVENT_PRIMARYDOWN
$GUI_EVENT_PRIMARYUP
$GUI_EVENT_SECONDARYDOWN
$GUI_EVENT_SECONDARYUP
$GUI_EVENT_MOUSEMOVE
GUI 示例
在 GUI 相关 的页面上我们曾编写过一个简单的窗口:
#include <GUIConstants.au3>
GUICreate("您好", 200, 100)
GUICtrlCreateLabel("最近过得怎样?", 30, 10)
GUICtrlCreateButton("还OK吧", 70, 50, 60)
GUISetState(@SW_SHOW)
Sleep(2000)
现在我们来尝试使用 OnEvent 以及上面描述的事件消息来完成全部代码:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1) ; 切换为 OnEvent 模式
$mainwindow = GUICreate("您好", 200, 100) ; 创建窗口并返回窗口句柄
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; 设置窗口关闭事件
GUICtrlCreateLabel("最近过得怎样?", 30, 10)
$okbutton = GUICtrlCreateButton("还OK吧", 70, 50, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUISetState(@SW_SHOW)
While 1
Sleep(1000) ; 不做任何事
WEnd
Func OKButton()
;注意:此时 @GUI_CTRLID 的值将等价于 $okbutton,
;而 @GUI_WINHANDLE 则等价于 $mainwindow
MsgBox(0, "GUI 事件", "您按下了“还OK吧”按钮!")
EndFunc
Func CLOSEClicked()
;注意:此时 @GUI_CTRLID 的值将等价于 $GUI_EVENT_CLOSE,
;而 @GUI_WINHANDLE 则等价于 $mainwindow
MsgBox(0, "GUI 事件", "您选择了关闭!正在退出...")
Exit
EndFunc
很简单,对吧?很明显创建的窗口及控件越多则脚本越复杂,但基本结构都是类似上面的这个示例。
高级操作及多窗口
即使有很多窗口存在,控件 ID 也是唯一的,但是我们如何处理多窗口呢?
下面这个示例脚本和上面的很像,但多出了一个“dummy(虚设的)”窗口。
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1) ; 切换为 OnEvent 模式
$mainwindow = GUICreate("您好", 200, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUICtrlCreateLabel("最近过得怎样?", 30, 10)
$okbutton = GUICtrlCreateButton("还OK吧", 70, 50, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
$dummywindow = GUICreate(" 这只是测试用的虚设窗口,并不会被显示 ", 200, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUISwitch($mainwindow)
GUISetState(@SW_SHOW)
While 1
Sleep(1000) ; 不做任何事
WEnd
Func OKButton()
;注意:此时 @GUI_CTRLID 的值将等价于 $okbutton
MsgBox(0, "GUI 事件", "您按下了“还OK吧”按钮!")
EndFunc
Func CLOSEClicked()
;注意:此时 @GUI_CTRLID 的值将等价于 $GUI_EVENT_CLOSE,
;而 @GUI_WINHANDLE 则等价于 $mainwindow 或 $dummywindow
If @GUI_WINHANDLE = $mainwindow Then
MsgBox(0, "GUI 事件", "您选择了关闭主窗口!正在退出...")
Exit
EndIf
EndFunc
第一个需要注意的变动是上面的脚本增加了一个 GUISwitch 函数的调用,当新的窗口被创建之后该窗口即变成后面所有GUI操作(包括创建控件在内)的“默认”窗口,也就是说这些GUI操作的对象都会是这个默认窗口。但我们希望显示的是主窗口(首先被创建的窗口)而不是那个测试窗口,这时就要使用 GUISwitch 函数来切换操作对象。某些GUI函数允许您在调用它们时使用窗口句柄(参数)来指定操作目标,同时也将自动切换该目标窗口为“默认窗口”。所以在这个示例中,我们还可以改用这样的语句:
GUISetState(@SW_SHOW, $mainwindow)
另外要注意的就是我们使用了同一个 OnEvent 函数来处理两个窗口的“关闭”事件,为了识别被关闭的窗口究竟是哪一个我们还使用了 @GUI_WINHANDLE 来检查发送消息的窗口句柄。这样处理之后我们就可以确保在窗口的关闭按钮被点击 而且 消息是从主窗口发送的时候才退出GUI了。当然了,您也可以为每个窗口指定不同的事件处理函数。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论