Scottswan Posted May 8, 2007 Share Posted May 8, 2007 (edited) Hi ya! I found this script on this board somewhere (by searching) and decided to use it for my little project. I have just about everything tweaked and working fine for my application except I can't figure out how to Exit the script after the last application has closed. Also, there is a huge delay between running the first install and the second if both are picked. By huge I mean about 10 - 15 seconds. expandcollapse popup#include <GUIConstants.au3> Opt("Trayicondebug",1) Opt("RunErrorsFatal",0); so the script won't stop if one of the install progs is missing GUICreate("WinShear32", 450, 200);450, 200, 310, 190 icon won't show with the 310 & 190 for some reason GUISetIcon("WinShear32.ico") GUICtrlCreateLabel("WinShear32 Install Options ", 130, 20) Local $opt[8][2] $opt[0][0] = GUICtrlCreateCheckbox("Install WinShear32 version 1.0.5 (new users install this first)", 20, 50) $opt[0][1] = "setup.exe" GUICtrlSetState(Default, $GUI_CHECKED) $opt[1][0] = GUICtrlCreateCheckbox("Install WinShear32 version 1.0.6 update (only if WinShear32 is already installed)", 20, 70) $opt[1][1] = "WinShear32_SP6.exe" GUICtrlSetState(Default, $GUI_CHECKED) GUICtrlCreateLabel ("Note: There may be a delay between the 1.0.5 and 1.0.6 installers", 50, 120) $exit = GUICtrlCreateButton("Exit", 150, 170, 60) $option = GUICtrlCreateButton("Install", 250, 170, 60) GUISetState(@SW_SHOW) While 1 $msg = GUIGetMsg() If $msg = $exit Then;Also need to Exit after the last process closes... Exit Elseif $msg = $option Then Install($opt) EndIf sleep(2) WEnd Func Install($aOpt) GUISetState(@SW_MINIMIZE) For $x = 0 to UBound($aOpt,1)-1 If GuiCtrlRead($aOpt[$x][0]) = 1 Then If $aOpt[$x][1] <> "" Then Run($aOpt[$x][1]) ProcessWaitClose($aOpt[$x][1]) Else MsgBox(0, "", "opt "&$x+1&" is checked",30);What is the condition to prompt this? EndIf EndIf Next EndFunc The Func at the bottom is way over my head, and I think that is why I can't figure out how to Exit. I don't think the installs are what is causing the delay, but I may be wrong. The first one is a msi and the second is a light-weight Spoon Installer, both open quickly if run separately. Any tips much appreciated! -Scott Edited May 8, 2007 by Scottswan Link to comment Share on other sites More sharing options...
Scottswan Posted May 8, 2007 Author Share Posted May 8, 2007 Well this didn't work... Func Install($aOpt) GUISetState(@SW_MINIMIZE) For $x = 0 to UBound($aOpt,1)-1 If GuiCtrlRead($aOpt[$x][0]) = 1 Then If $aOpt[$x][1] <> "" Then Run($aOpt[$x][1]) ProcessWaitClose($aOpt[$x][1]) ; If ProcessWaitClose($aOpt[0]) Then ; Exit ; EndIF Else MsgBox(0, "", "opt "&$x+1&" is checked",30) EndIf EndIf Next EndFunc I'm stumped. Link to comment Share on other sites More sharing options...
Valuater Posted May 8, 2007 Share Posted May 8, 2007 Elseif $msg = $option Then Install($opt) Exit 8) Link to comment Share on other sites More sharing options...
Scottswan Posted May 8, 2007 Author Share Posted May 8, 2007 (edited) Elseif $msg = $option Then Install($opt) Exit 8) The problem was that it was too easy, I'm better with the hard stuff. While 1 $msg = GUIGetMsg() If $msg = $exit Then Exit Elseif $msg = $option Then Install($opt) Sleep(20) Exit ;Exit after the last process starts EndIf WEnd Needed a little delay so the second install doesn't loose focus. Thanks, that was killing me! Edit: That msi is causing the delay, not the script. It has hang time while it's shutting down or something. I'm moving everything over to NSIS soon anyway, this is just a bandaid so people aren't confused trying to find the patch. Edited May 8, 2007 by Scottswan Link to comment Share on other sites More sharing options...
Scottswan Posted May 9, 2007 Author Share Posted May 9, 2007 One more tiny thing that I'm stuck on. How can I hide a GUICtrlCreateLabel depending on which selection is made? expandcollapse popup#include <GUIConstants.au3> GUICreate("WinShear32", 450, 200) GUISetIcon("WinShear32.ico") GUISetFont(14,600) GUICtrlCreateLabel("WinShear32 Install Options ", 100, 10) GUISetFont(9,400) Local $opt[2][2] $opt[0][0] = GUICtrlCreateRadio("Install WinShear32 and the latest update ", 20, 50) $opt[0][1] = "setup.exe" GUICtrlSetState(Default, $GUI_CHECKED) $opt[1][0] = GUICtrlCreateRadio("Install WinShear32 version 1.0.6 update only (if WinShear32 is already installed) ", 20, 70) $opt[1][1] = "WinShear32_SP6.exe" GUICtrlCreateLabel ("Note: There may be a delay between the WinShear32 and 1.0.6 update installers", 30, 120) ;This one should hide if $opt[1][0] is picked If GuiCtrlRead($opt[1][0]) = 1 Then ;This doesn't work... GUICtrlSetState(-1,$GUI_DISABLE) EndIf $exit = GUICtrlCreateButton("Exit", 130, 170, 60) $option = GUICtrlCreateButton("Install", 250, 170, 60) GUISetState(@SW_SHOW) While 1 $msg = GUIGetMsg() If $msg = $exit Then Exit Elseif $msg = $option Then Install($opt) Sleep(60) Exit ;Exit after the last process starts EndIf WEnd Func Install($opt) GUISetState(@SW_MINIMIZE) If GuiCtrlRead($opt[0][0]) = 1 Then Run($opt[0][1]) If ProcessWaitClose($opt[0][1]) Then Run($opt[1][1]) EndIf Else Run($opt[1][1]) EndIf EndFunc Link to comment Share on other sites More sharing options...
PsaltyDS Posted May 9, 2007 Share Posted May 9, 2007 Try this: #include <GUIConstants.au3> GUICreate("WinShear32", 450, 200) GUISetIcon("WinShear32.ico") GUISetFont(14, 600) GUICtrlCreateLabel("WinShear32 Install Options ", 100, 10) GUISetFont(9, 400) Local $opt[2][2] $opt[0][0] = GUICtrlCreateRadio("Install WinShear32 and the latest update ", 20, 50) $opt[0][1] = "setup.exe" GUICtrlSetState(Default, $GUI_CHECKED) $opt[1][0] = GUICtrlCreateRadio("Install WinShear32 version 1.0.6 update only (if WinShear32 is already installed) ", 20, 70) $opt[1][1] = "WinShear32_SP6.exe" $Label_2 = GUICtrlCreateLabel("Note: There may be a delay between the WinShear32 and 1.0.6 update installers", 30, 120) $exit = GUICtrlCreateButton("Exit", 130, 170, 60) $option = GUICtrlCreateButton("Install", 250, 170, 60) GUISetState(@SW_SHOW) While 1 $Msg = GUIGetMsg() If $Msg = $GUI_EVENT_CLOSE Then Exit If ControlCommand("WinShear32", "", $opt[1][0], "IsChecked") Then GUICtrlSetState($Label_2, $GUI_HIDE) Else GUICtrlSetState($Label_2, $GUI_SHOW) EndIf WEnd Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
Scottswan Posted May 9, 2007 Author Share Posted May 9, 2007 Excellent, thanks! Here's what I ended up with, I added a little delay to reduce the flickering of that label some... Also made both the button and GUI X exit, thanks for pointing that out too! $Note = GUICtrlCreateLabel ("Note: There may be a delay between the WinShear32 and 1.0.6 update installers", 30, 120) oÝ÷ Ù«¢+Ø)]¡¥±Ä(ÀÌØí5ÍôU%Ñ5Í ¤(%ÀÌØí5ÍôÀÌØí½ÁÑ¥½¸Q¡¸(%¹Íѱ° ÀÌØí½ÁФ($$M±À ØÀ¤($%á¥Ðíá¥ÐÑÈÑ¡±ÍÐÁɽÍÌÍÑÉÑÌ)¹%)%ÀÌØí5ÍôÀÌØíU%}Y9Q} 1=MQ¡¸(%á¥Ð(%±Í%ÀÌØí5ÍôÀÌØíá¥ÐQ¡¸(%á¥Ð)¹%)% ½¹Ñɽ± ½µµ¹ ÅÕ½Ðí]¥¹M¡ÈÌÈÅÕ½Ðì°ÅÕ½ÐìÅÕ½Ðì°ÀÌØí½ÁÑlÅulÁt°ÅÕ½Ðí%Í ¡ÅÕ½Ðì¤Q¡¸(U% ÑɱMÑMÑÑ ÀÌØí9½Ñ°ÀÌØíU%}!%¤(±Í(U% ÑɱMÑMÑÑ ÀÌØí9½Ñ°ÀÌØíU%}M!=¤($%M±À ØÀ¤)¹%)]¹( Link to comment Share on other sites More sharing options...
PsaltyDS Posted May 9, 2007 Share Posted May 9, 2007 Excellent, thanks!You're welcome.Here's what I ended up with, I added a little delay to reduce the flickering of that label some...Surest way to do that is use GuiOnEventMode. A little bit more pain to code, but much better performance. Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now