Technical support and scripting issues
Moderators: Dorian (MJT support), JRL
-
ukdboyd
- Newbie
- Posts: 11
- Joined: Wed May 25, 2005 6:09 pm
Post
by ukdboyd » Fri Aug 14, 2009 2:42 pm
I'me trying to write a simple script that will show a dialog box with a progress bar and a cancel button. The purpose is to reboot the computer, or cancel the reboot. For testing purposes, ive not put the reboot line in yet.
Here's what I have:
Code: Select all
Dialog>Dialog1
Caption=Dialog1
Width=400
Height=168
Top=300
Left=276
Label=SAVE YOUR WORK!! REBOOTING COMPUTER IN 15 SECONDS,46,24
Button=CANCEL REBOOT,144,88,113,25,2
ProgressBar=ProgressBar,80,56,233,18,0
EndDialog>Dialog1
Show>Dialog1
GetDialogAction>dialog1,r
Let>k=1
Repeat>k
Let>Dialog1.progressbar=k
ResetDialogAction>Dialog1
Wait>.15
Let>k=k+1
Until>k,100
Label>END
Exit
The script works, but I can't figure out where or how to put the line in that cancels the script when the button is pressed.
Thanks to anyone who can help me with this.
-
JRL
- Automation Wizard
- Posts: 3526
- Joined: Mon Jan 10, 2005 6:22 pm
- Location: Iowa
Post
by JRL » Fri Aug 14, 2009 3:40 pm
TRy moving the GetDialogAction line down into the repeat loop and if variable "r" becomes "2" then Exit>0
Code: Select all
Dialog>Dialog1
Caption=Dialog1
Width=400
Height=168
Top=300
Left=276
Label=SAVE YOUR WORK!! REBOOTING COMPUTER IN 15 SECONDS,46,24
Button=CANCEL REBOOT,144,88,113,25,2
ProgressBar=ProgressBar,80,56,233,18,0
EndDialog>Dialog1
Show>Dialog1
GetDialogAction>dialog1,r
Let>k=1
Repeat>k
GetDialogAction>dialog1,r
If>r=2
Exit>0
EndIf
Let>Dialog1.progressbar=k
ResetDialogAction>Dialog1
Wait>.15
Let>k=k+1
Until>k,100
Label>END
Exit
-
gdyvig
- Automation Wizard
- Posts: 447
- Joined: Fri Jun 27, 2008 7:57 pm
- Location: Seattle, WA
Post
by gdyvig » Fri Aug 14, 2009 3:45 pm
Here is another way to do the same thing:
Add this to the top of your sript:
Code: Select all
OnEvent>DIALOG_EVENT,Dialog1,2,CancelReboot
SRT>CancelReboot
MDL>Cancelling reboot
exit>0
END>CancelReboot
Posting this partly so I will remember how to do it myself.
See Fran's recent post for more examples.
Gale
-
JRL
- Automation Wizard
- Posts: 3526
- Joined: Mon Jan 10, 2005 6:22 pm
- Location: Iowa
Post
by JRL » Fri Aug 14, 2009 3:51 pm
Excellent solution Gale! Much better than my suggestion. What I suggested could fail if the user picked the "Cancel" button during that one thousandth of a second between GetDialogAction and ResetDialogAction... not likely but possible. the Onevent method will never fail.
-
ukdboyd
- Newbie
- Posts: 11
- Joined: Wed May 25, 2005 6:09 pm
Post
by ukdboyd » Fri Aug 14, 2009 3:54 pm
Thanks! That's what was look for!
-
ukdboyd
- Newbie
- Posts: 11
- Joined: Wed May 25, 2005 6:09 pm
Post
by ukdboyd » Fri Aug 14, 2009 4:47 pm
Quick followup question...
Script is working fine...i've compiled it into an EXE for distribution.
When I run the executable on my computer for testing it works perfectly. However, when I run it on another computer, it runs, but the progress bar moves much slower. The script still works, the button works, the computer reboots as desired. But, rather than taking 15 seconds to run, it takes about 45 seconds.
Any ideas? FWIW, the other computer is newer and faster than the one I'm using for development, so I wouldn't think it would be a CPU problem.
Thanks again.
-
JRL
- Automation Wizard
- Posts: 3526
- Joined: Mon Jan 10, 2005 6:22 pm
- Location: Iowa
Post
by JRL » Fri Aug 14, 2009 5:05 pm
Try using VBScript "timer" function.
Code: Select all
OnEvent>DIALOG_EVENT,Dialog1,2,CancelReboot
SRT>CancelReboot
exit>0
END>CancelReboot
VBSTART
VBEND
Dialog>Dialog1
Caption=Dialog1
Width=400
Height=168
Top=300
Left=276
Label=SAVE YOUR WORK!! REBOOTING COMPUTER IN 15 SECONDS,46,24
Button=CANCEL REBOOT,144,88,113,25,2
ProgressBar=ProgressBar,80,56,233,18,0
EndDialog>Dialog1
Show>Dialog1
GetDialogAction>dialog1,r
VBEval>Timer,StartTime
Label>Start
VBEval>Timer-%StartTime%,Totaltime
If>Totaltime>15,END
Let>Dialog1.progressbar={round((%TotalTime%/15)*100)}
Let>DisplayTime={15-(round(%TotalTime%))}
Let>Dialog1.mslabel1=SAVE YOUR WORK!! REBOOTING COMPUTER IN %DisplayTime% SECONDS
ResetDialogAction>Dialog1
Wait>0.01
Goto>Start
Label>END
Exit