superflq
发表于 2008-12-12 14:08:46
原帖由 liongodmien 于 2008-12-12 14:01 发表 http://www.autoitx.com/images/common/back.gif
有要求也是好的!
$Form1 = GUICreate("例子一", 307, 81, -1, -1)
$Button1 = GUICtrlCreateButton("开始", 32, 24, 97, 33, 0)
$Button2 = GUICtrlCreateButton("停止", 176, 24, 97, 33, 0)
GUISetSta ...
嗯,这个办法确实不错,很符合我的要求,就是想问下case -3是什么意思
superflq
发表于 2008-12-12 14:13:24
原帖由 liongodmien 于 2008-12-12 14:04 发表 http://www.autoitx.com/images/common/back.gif
无论是事件模式还是消息模式,一定要让程序能有空闲时间获得你的动作消息,不然就像电脑假死,没反应!
狮子大哥太厉害了,又学了一招
liongodmien
发表于 2008-12-12 14:19:56
-3是窗口消息里面关闭窗口的值
我们平常用的$GUI_EVENT_CLOSE就等于-3,当你只用这一个的时候,把一个大大的另外的定义文件引用过来,实在是浪费空间,这也是为什么AU3生成程序后体积大的一个原因,要相对有效的减少生成程序的尺寸,可以在加密那加些相应的参数:/cs=0 /cn=0 /cf=0 /cv=0 /sf=1 /sv=1
superflq
发表于 2008-12-12 14:27:54
喔,原来如此
$GUI_EVENT_CLOSE就等于-3
其他的呢,比如最大化之类的呢,说明文档里有么,
superflq
发表于 2008-12-12 14:29:13
事件 ID 控件发生的消息ID
0 无事件
$GUI_EVENT_CLOSE 对话框(窗口)正被关闭(相关按钮被点击或系统菜单项被选中)
$GUI_EVENT_MINIMIZE 对话框(窗口)被最小化(窗口标题栏上的最小化按钮被点击)
$GUI_EVENT_RESTORE 对话框(窗口)被还原(任务栏图标被点击)
$GUI_EVENT_MAXIMIZE 对话框(窗口)被最大化(窗口标题栏上的最大化按钮被点击)
$GUI_EVENT_MOUSEMOVE 鼠标光标被移动.
$GUI_EVENT_PRIMARYDOWN 鼠标的主要按钮被按下.(多指左键)
$GUI_EVENT_PRIMARYUP 鼠标的主要按钮被松开.(多指左键)
$GUI_EVENT_SECONDARYDOWN 鼠标的第二个按钮被按下.(多指右键)
$GUI_EVENT_SECONDARYUP 鼠标的第二个按钮被松开.(多指右键)
$GUI_EVENT_RESIZED dialog box has been resized.
$GUI_EVENT_DROPPED End of a Drag&Drop action @GUI_DRAGID, @GUI_DRAGFILE and @GUI_DROPID will be used to retrieve the ID's/file corresponding to the involve control.
是不是都有代码的?
liongodmien
发表于 2008-12-12 14:41:33
在AU3目录下用包含搜索可搜到
superflq
发表于 2008-12-12 15:10:27
Global Const $GUI_EVENT_CLOSE = -3
Global Const $GUI_EVENT_MINIMIZE = -4
Global Const $GUI_EVENT_RESTORE = -5
Global Const $GUI_EVENT_MAXIMIZE = -6
Global Const $GUI_EVENT_PRIMARYDOWN = -7
Global Const $GUI_EVENT_PRIMARYUP = -8
Global Const $GUI_EVENT_SECONDARYDOWN = -9
Global Const $GUI_EVENT_SECONDARYUP = -10
Global Const $GUI_EVENT_MOUSEMOVE = -11
Global Const $GUI_EVENT_RESIZED = -12
Global Const $GUI_EVENT_DROPPED = -13
:face (10):
superflq
发表于 2008-12-12 22:19:54
放上星驰周大哥给我的解决方案,供大家参考
#include
#include
#include
#include
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 559, 316, 192, 124)
$Button1 = GUICtrlCreateButton("开始循环", 168, 122, 177, 45, 0)
$Button2 = GUICtrlCreateCheckbox("退出循环", 168, 182, 177, 65, 0)
GUICtrlSetState($Button2, $GUI_DISABLE)
$Label1 = GUICtrlCreateLabel("while的退出问题!", 136, 56, 256, 41)
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
GUICtrlSetState($Button2, $GUI_ENABLE)
GUICtrlSetState($Button2, $GUI_UNCHECKED)
;循环的间隔秒数,显示的次数
Dim $i = 3, $j = 0
While 1
If GUICtrlRead($Button2) = $GUI_CHECKED Then
GUICtrlSetState($Button2, $GUI_DISABLE)
TrayTip("", "", 1)
ExitLoop
EndIf
;------------------以下是自定义代码部分-------------------
Sleep($i * 1000)
$j = $j + 1
TrayTip("脚本正在循环中", "目的是第" & $j & "次", 10, 1)
;------------------以上是自定义代码部分-------------------
WEnd
Case $Button2
MsgBox(0, "你按了退出键", "但是没有退出效果!哈哈", 2)
EndSwitch
WEnd
MsgBox(0, "", "退出成功了")
cxlater
发表于 2008-12-12 22:41:42
曾经为这个问题花了很长时间才解决 到底怎么解决我也忘记的了
我感觉这个就是au3的很大的一个弊病以来循环来保持窗体的存在并且不方便实现多线程
文白
发表于 2008-12-12 23:39:55
使用HotKey停止 又怕影响其它的软件运行
可以使用判定窗口状态来解决
举例:
HotKeySet ( "{Enter}" ,"GuiExit" )
$Form = GuiCreate("",200,200)
GuiSetState()
while 1
sleep(50)
wend
Func GuiExit()
if bitand(WinGetState ( $Form),8 ) then
exit
else
HotKeySet("{Enter}")
Send("{Enter}")
HotKeySet("{Enter}", "GuiExit")
endif
EndFunc
superflq
发表于 2008-12-12 23:54:03
原帖由 文白 于 2008-12-12 23:39 发表 http://www.autoitx.com/images/common/back.gif
使用HotKey停止 又怕影响其它的软件运行
可以使用判定窗口状态来解决
举例:
HotKeySet ( "{Enter}" ,"GuiExit" )
$Form = GuiCreate("",200,200)
GuiSetState()
while 1
sleep(50)
wend
Func GuiE ...
这个办法也不错,顶一下
askask150
发表于 2008-12-13 02:35:18
:face (29): 经验太多了收藏 慢慢消化
superflq
发表于 2008-12-21 08:50:08
自己研究了一种最完美的解决方案 利用TIMERS UDF
#include <GUIConstants.au3>
#include <Timers.au3>
$Form = GUICreate("例子一", 307, 81, -1, -1)
$Button1 = GUICtrlCreateButton("开始", 32, 24, 97, 33, 0)
$Button2 = GUICtrlCreateButton("停止", 176, 24, 97, 33, 0)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Dim $i=0
$iTimeProgres4 = _Timer_SetTimer($Form , 500,'fit')
Case $Button2
_Timer_KillTimer($Form, $iTimeProgres4)
MsgBox(0,"结果",$i)
EndSwitch
WEnd
Func fit($hWnd, $iMsg, $iwParam, $ilParam)
$i += 1
TrayTip("脚本正在循环中", "目的是第" & $i & "次", 10, 1)
EndFunc
[ 本帖最后由 superflq 于 2008-12-21 08:54 编辑 ]
superflq
发表于 2008-12-21 08:55:32
TIMERS的事件模式,希望对大家有帮助
#include
#include
#include
#include
$Form = GUICreate("例子一", 307, 81, -1, -1)
$Button1 = GUICtrlCreateButton("开始", 32, 24, 97, 33, 0)
$Button2 = GUICtrlCreateButton("停止", 176, 24, 97, 33, 0)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_TIMER, "WM_TIMER")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Dim $i=0
$iTimeProgres4 = _Timer_SetTimer($Form , 500)
Case $Button2
_Timer_KillTimer($Form, $iTimeProgres4)
MsgBox(0,"结果",$i)
EndSwitch
WEnd
Func WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam)
Switch _Timer_GetTimerID($iwParam)
Case $iTimeProgres4
fit()
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_TIMER
Func fit()
$i += 1
TrayTip("脚本正在循环中", "目的是第" & $i & "次", 10, 1)
EndFunc
ceoguang
发表于 2009-1-17 03:56:17
呵呵,我再来增加个难题#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>
$Form = GUICreate("例子一", 307, 81, -1, -1)
$Button1 = GUICtrlCreateButton("开始", 32, 24, 97, 33, 0)
$Button2 = GUICtrlCreateButton("停止", 176, 24, 97, 33, 0)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_TIMER, "WM_TIMER")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Dim $i=0
$iTimeProgres4 = _Timer_SetTimer($Form , 500)
Case $Button2
_Timer_KillTimer($Form, $iTimeProgres4)
MsgBox(0,"结果",$i)
EndSwitch
WEnd
Func WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam)
Switch _Timer_GetTimerID($iwParam)
Case $iTimeProgres4
fit()
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_TIMER
Func fit()
For $i = 1 To 100
TrayTip("脚本正在循环中", "目的是第" & $i & "次", 10, 1)
Sleep(100)
Next
EndFunc
后面再加个循环,GUI就又死了,楼主的再出点主意看看