关于onevent[已解决]
本帖最后由 love5173 于 2011-5-18 12:08 编辑帮别人写的一个小工具,由于自己这个模式也不是很熟练,导致循环退出出现问题,请高手指教一下#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("xxx亲情打造", 221, 315, 192, 114)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Label1 = GUICtrlCreateLabel("执行次数:", 16, 256, 55, 17)
$Label2 = GUICtrlCreateLabel("0", 96, 248, 82, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("开始", 48, 56, 113, 113)
GUICtrlSetFont(-1, 30, 800, 0, "MS Sans Serif")
GUICtrlSetOnEvent(-1, "Button1Click")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $txt="三茅招聘管理软件 - 安装向导"
While 1
Sleep(100)
WEnd
Func Button1Click()
Global $i=0
Global $a=0
Global $zhuangtai=GUICtrlRead($Button1)
If $zhuangtai="开始" Then
GUICtrlSetData($Button1,"结束")
Global $a=1
While $a
anzhuang()
Sleep(2000)
If $a Thenxiezai()
cishu($i)
WEnd
Else
GUICtrlSetData($Button1,"开始")
ProcessClose("3MRecruitInstall.exe")
ProcessClose("setup.exe")
EndIf
EndFunc
Func Form1Close()
Exit
EndFunc
Func anzhuang()
Run("3MRecruitInstall.exe")
WinWait($txt,"欢迎使用")
WinActivate($txt,"欢迎使用")
Send("!N")
WinWait($txt,"许可证协议")
WinActivate($txt,"许可证协议")
ControlCommand($txt,"许可证协议","Button5","Check", "")
Sleep(100)
Send("!N")
WinWait($txt,"选择目的地位置")
WinActivate($txt,"选择目的地位置")
Send("!N")
WinWait($txt,"可以安装该程序了")
WinActivate($txt,"可以安装该程序了")
Send("{ENTER}")
WinWait($txt,"安装向导")
WinActivate($txt,"安装向导")
Send("{SPACE}")
Sleep(300)
Send("{ENTER}")
WinWait("readme.txt - 记事本","")
WinClose("readme.txt - 记事本","")
EndFunc
Func xiezai()
Run("C:\Program Files\InstallShield Installation Information\{2E2A12B5-84D7-4C2C-834E-E258159F6E3C}\setup.exe")
WinWait("三茅招聘管理软件","欢迎")
WinActivate("三茅招聘管理软件","欢迎")
Send("!R")
Sleep(300)
Send("!N")
Sleep(500)
Send("Y")
WinActivate("三茅招聘管理软件","卸载完成")
Send("{DOWN}")
Sleep(300)
Send("{ENTER}")
EndFunc
Func cishu($i)
$i+=1
GUICtrlSetData($Label2,$i)
EndFunc
因为没有与程序相关的软件,仅是猜测.
问题不是出在消息模式上,而是出在32行开始的循环上.因为AU3不支持多线程,所以只能提高响应级别来对循环进行中断.代码思路如下,不知道有没有帮助.
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $Flg = True
Global $Click = 0
Local $t = 0
$Form1 = GUICreate("Form1", 318, 120, 468, 171)
GUISetOnEvent(-3, "_exit")
$Button1 = GUICtrlCreateButton("开始循环", 48, 60, 80, 40)
GUICtrlSetOnEvent(-1, "Click")
$Lable = GUICtrlCreateLabel("", 208, 60, 80, 40)
;$Button2 = GUICtrlCreateButton("结束循环", 208, 60, 80, 40)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
Sleep(100)
WEnd
Func _exit()
Exit
EndFunc ;==>_exit
Func Click()
If GUICtrlRead($Button1) = "开始循环" And $Flg = True Then
GUICtrlSetData($Button1, "结束循环")
$Click += 1
GUICtrlSetData($Lable, "执行第" & $Click & "次循环")
TEST()
Else
GUICtrlSetData($Button1, "开始循环")
EndIf
EndFunc ;==>Click
Func TEST()
While $Flg
ToolTip($t)
$t += 1
WEnd
$Flg = True
$t = 0
EndFunc ;==>TEST
Func WM_COMMAND($hWnd, $msg, $wParam, $lParam)
#forceref $hWnd, $Msg
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
Local $hCtrl = $lParam
Switch $hCtrl
Case GUICtrlGetHandle($Button1)
If GUICtrlRead($Button1) = "结束循环" Then
$Flg = False
Else
$Flg = True
EndIf
EndSwitch
EndFunc ;==>WM_COMMAND
回复 2# 3mile
谢谢3M的代码,提高响应级别,以前没接触过,我要消化一下! 回复 4# qqwangbiz
哪里有才了??
页:
[1]