Autoit编GUI界面,为什么须要一个sleep,否则一闪即逝?
本帖最后由 vigiles 于 2014-1-26 13:21 编辑;函数Opt:更改GUI的交互模式为事件模式。Opt即AutoItSetOption简写
Opt("GUIOnEventMode", 1) ; 0=禁用事件模式, 1=启用事件模式
;隐藏右下角图标
Opt("TrayIconHide", 1)
;定义窗口关闭消息的值。-3为点击关闭按钮返回的固定值,$GUI_EVENT_CLOSE是个专用的窗口事件ID,表示关闭
Global Const $GUI_EVENT_CLOSE = -3
;变量$mainGUI:对窗体的引用,GUI函数GUICreate:创建一个窗口 默认居中显示(标题,宽, 高)
$mainGUI = GUICreate ( " 我的第一个窗口 " )
;GUI函数GUICtrlSetOnEvent:给窗体添加事件(窗体事件ID,处理方法)
GUISetOnEvent($GUI_EVENT_CLOSE, "funcGUI")
;变量$btn:对按钮的引用,函数GUICtrlCreateButton:创建一个按钮(文本,)
$btn = GUICtrlCreateButton("确定", 70, 50, 60)
;GUI函数GUICtrlSetOnEvent:给按钮添加事件(按钮,处理方法)
GUICtrlSetOnEvent($btn, "funcGUI")
;GUI函数GUISetState:指定窗体显示(显示宏,窗体)
GUISetState(@SW_SHOW, $mainGUI)
;下面这个死循环为何是必须的?
#comments-start
While 1
Sleep(1000) ; 休眠(毫秒), 以降低 CPU 使用率
WEnd
#comments-end
;关键字Func:定义一个方法
Func funcGUI()
;使用宏@GUI_CtrlId来判断消息来源于控件ID或系统事件ID
Switch @GUI_CtrlId
;固定ID存储窗体关闭返回值
Case $GUI_EVENT_CLOSE
Exit
Case $btn
MsgBox(0, "GUI按钮事件", "你点击了 '确定' 按钮!")
EndSwitch
EndFunc
这里没有使用#include <GUIConstantsEx.au3>
请问这个死循环起什么作用?当没有这个死循环时并未发生交互事件,为何窗体关闭了? 如果没有那个循环,代码执行到此处已是结尾,就会退出;窗体就是因程序退出而给关闭了。 执行这个循环就是让窗体暂停等待状态, Sleep可以没有。 如果没有那个循环,代码执行到此处已是结尾,就会退出;窗体就是因程序退出而给关闭了。
user3000 发表于 2014-1-26 18:06 http://www.autoitx.com/images/common/back.gif
执行这个循环就是让窗体暂停等待状态, Sleep可以没有。
fuldho 发表于 2014-1-26 18:19 http://www.autoitx.com/images/common/back.gif
++++++++++++++++++++++++++++++++++++++++++
代码结尾并没有“Exit”或者“GUIDelete”等命令啊?难道执行了我自定义的“funcGUI”方法,在Exit时退出的?
不太明白Autoit的运行机制啊 简单来说,就是从代码的第一行开始解释执行,如果没有while循环,就直接逐句解释完,然后退出。 代码从第一条执行到最后一条。如果没有循环语句则执行完毕后自动关闭。。。。 不需要这个 sleep 嗯,不知道是不是可以这样理解,以后一般的GUI想要一直显示的话,都添加一个While循环对么? 原来如此,看明白了 回复 1# vigiles
在这类的情况下,建议删除sleep,以免程序迟缓! sleep可以减少系统资源的耗费 回复 3# fuldho
Sleep如果没有CPU占用率会变得极高。至少Sleep(1) 回复 4# vigiles
脚本按照从上至下的方式执行,最末行默认有一个Exit。自定义函数不算,自定义函数只有被调用时才会被运行。如果你不理解,其实是因为你在初学阶段(单指AU3,看楼主有其他基础)就是用了事件响应模式,而不是消息循环模式。 回复vigiles
脚本按照从上至下的方式执行,最末行默认有一个Exit。自定义函数不算,自定义函数 ...
skyfree 发表于 2014-3-11 15:27 http://www.autoitx.com/images/common/back.gif
谢谢,现在理解了 刚开始学的时候我也有过这个疑惑,呵呵
页:
[1]