Progress indicator for a halted script

General Macro Scheduler discussion

Moderators: JRL, Dorian (MJT support)

Post Reply
User avatar
JRL
Automation Wizard
Posts: 3529
Joined: Mon Jan 10, 2005 6:22 pm
Location: Iowa

Progress indicator for a halted script

Post by JRL » Fri May 01, 2009 10:07 pm

One thing I personnally dislike is a program that pauses for a long period of time and provides no feedback to the user that the task is progressing. Sometimes there is a long pause in a program that I've written while background processes perform their tasks. I always try to provide feedback either through updating a dialog text label or by using the Progress Bar object. kpassaur has provided a sample for another method HERE. These techniques work as long as the script is continuing to chug along. However, every now and then I run into a situation where the script comes to a complete halt while a process takes place. For example I have some scripts pulling data from databases that come to a stop for a minute or more while vast quantities of data are evaluated and tens of thousands of variables are created. In these situations, since the script has stopped, dynamic updating of dialog text or a progress bar is not possible... unless... there is a second script.

Here is an example that uses the second script technique to display motion in the dialog box to keep the user happy. The example below doesn't actually do anything except wait a specified number of seconds. For simplicity, I've embedded the second script in the first script as a line of base64 encoding using the technique described HERE.


Code: Select all

Dialog>Dialog1
   Caption=Large File Processor
   Width=590
   Height=198
   Top=CENTER
   Left=CENTER
   Max=0
   Min=0
   Close=0
   Resize=0
   Label=Enter Large File to be processed,15,15,true
   Label=How many seconds to pretend to wait,16,72,true
   Edit=msEdit1,18,37,447,C:\Not\Really\Processing\Any\File.txt
   Edit=msEdit2,19,94,46,15
   Button=X,567,0,18,18,2
   Button=Ok,253,123,75,25,3
EndDialog>Dialog1

Show>Dialog1
SetDialogObjectFont>Dialog1,MsButton1,Arial,12,1,0

Label>Loop
GetDialogAction>Dialog1,res1
If>res1=2
  Exit>0
EndIf
If>res1=3
  GoSub>Process
  ResetDialogAction>Dialog1
    LibFunc>User32,EnableWindow,EWres7,Dialog1.msEdit1.handle,1
    LibFunc>User32,EnableWindow,EWres7,Dialog1.msEdit2.handle,1
    LibFunc>User32,EnableWindow,EWres7,Dialog1.msButton1.handle,1
    LibFunc>User32,EnableWindow,EWres7,Dialog1.msButton2.handle,1
  CloseDialog>Dialog1
  Show>Dialog1
EndIf
Wait>0,01
Goto>Loop

SRT>Process
  Let>ScriptFile=Ly9Vc2FnZToNCi8vR29TdWI+Um90YXRlV2FpdCxXaW5IYW5kbGUsWGNlbnRlcixZY2VudGVyLE9TcmFkaXVzLElTUmFkaXVzLFJvdHF0eSxSb3RzcGVlZCxSb3RzaXplLFJvdGNvbG9yKG9wdGlvbmFsKQ0KLy9MZWF2aW5nIG9mZiB0aGUgb3B0aW9uYWwgY29sb3IgcGFyYW1ldGVyIHdpbGwgcmVzdWx0IGluIHJhbmRvbSBjb2xvcnMuDQovL1NhbXBsZToNCi8vR29TdWI+Um90YXRlV2FpdCxEaWFsb2cxLmhhbmRsZSwxMTAsMjAsMTAsMTAsMTIsNSw1LDcyODUyNjANCi8vZm9yIEJhc2U2NCB1c2FnZToNCkdvU3ViPlJvdGF0ZVdhaXQsV2luSGFuZGxlLFhjZW50ZXIsWWNlbnRlcixPU3JhZGl1cyxJU1JhZGl1cyxSb3RxdHksUm90c3BlZWQsUm90c2l6ZSxSb3Rjb2xvcg0KDQpTUlQ+Um90YXRlV2FpdA0KTGV0Pm91dGVyX3JhZGl1cz0lUm90YXRlV2FpdF92YXJfNCUNCkxldD5Jbm5lcl9yYWRpdXM9JVJvdGF0ZVdhaXRfdmFyXzUlDQpMZXQ+TnVtYmVyT2ZMaW5lcz0lUm90YXRlV2FpdF92YXJfNiUNCkxldD5zcGVlZD0lUm90YXRlV2FpdF92YXJfNyUNCkxldD5saW5lc2l6ZT0lUm90YXRlV2FpdF92YXJfOCUNCkFzc2lnbmVkPlJvdGF0ZVdhaXRfdmFyXzksQXJlcw0KSWY+QXJlcz1UUlVFDQogIExldD5jb2xvcj0lUm90YXRlV2FpdF92YXJfOSUNCkVsc2UNCiAgTGV0PmNvbG9yPQ0KRW5kSUYNCg0KTGV0PnNwZWVkPTEvJXNwZWVkJQ0KTGV0PnNwYWNpbmc9eyhwaSoyKS8lTnVtYmVyT2ZMaW5lcyV9DQpMZXQ+Q2lyY2xlTWF4PXsocGkqMiktKDIqJXNwYWNpbmclKX0NCg0KR29TdWI+R29Bcm91bmQNCg0KU1JUPkdvQXJvdW5kDQogIE9uRXZlbnQ+RmlsZV9FeGlzdHMsJXRlbXBfZGlyJUNsb3NlV2FpdERpYWxvZy50eHQsMCxDbG9zZQ0KICBTUlQ+Q2xvc2UNCiAgICBEZWxldGVGaWxlPiV0ZW1wX2RpciVDbG9zZVdhaXREaWFsb2cudHh0DQogICAgRXhpdD4NCiAgRU5EPkNsb3NlDQogIEdvU3ViPkNpcmNsZUxvY2F0aW9uDQogIExpYkZ1bmM+dXNlcjMyLEdldERDLEhEQywlUm90YXRlV2FpdF92YXJfMSUNCiAgTGliRnVuYz5nZGkzMixHZXRQaXhlbCxia2NvbG9yLEhEQywwLDANCiAgTGV0PmVyYXNlPTANCiAgTGliRnVuYz51c2VyMzIsR2V0REMsSERDLCVSb3RhdGVXYWl0X3Zhcl8xJQ0KICBMYWJlbD5yZXJ1bg0KICAgIExldD5zaG93a2s9LSVzcGFjaW5nJQ0KICAgIElmPmVyYXNlPTANCiAgICAgIElmPmNvbG9yPQ0KICAgICAgICBSYW5kb20+MTY3NzcyMTQsY29sb3VyDQogICAgICBFbHNlDQogICAgICAgIExldD5jb2xvdXI9NzI4NTI2MA0KICAgICAgZW5kSWYNCiAgICBFbHNlDQogICAgICBJZj5jb2xvcj0NCiAgICAgICAgUmFuZG9tPjE2Nzc3MjE0LGNvbG91cg0KICAgICAgRWxzZQ0KICAgICAgICBMZXQ+Y29sb3VyPWJrY29sb3INCiAgICAgIGVuZElmDQogICAgRW5kSWYNCiAgICBMaWJGdW5jPmdkaTMyLENyZWF0ZVBlbixQZW5yZXMsMCwlbGluZXNpemUlLCVjb2xvdXIlDQogICAgTGliRnVuYz5nZGkzMixTZWxlY3RPYmplY3QsU09QcmVzLGhkYyxQZW5yZXMNCiAgICBSZXBlYXQ+c2hvd2trDQogICAgICBBZGQ+c2hvd2trLCVzcGFjaW5nJQ0KICAgICAgTGV0Pm94cG9zPW94cG9zXyVzaG93a2slDQogICAgICBMZXQ+b3lwb3M9b3lwb3NfJXNob3drayUNCiAgICAgIExldD5peHBvcz1peHBvc18lc2hvd2trJQ0KICAgICAgTGV0Pml5cG9zPWl5cG9zXyVzaG93a2slDQogICAgSWY+cmVzMT0yDQogICAgICBFeGl0PjANCiAgICBFbmRJZg0KICAgICAgR29TdWI+RHJhd0xpbmUsJVJvdGF0ZVdhaXRfdmFyXzElLCVsaW5lc2l6ZSUsY29sb3VyLGl4cG9zLGl5cG9zLG94cG9zLG95cG9zDQogICAgICBXYWl0PiVzcGVlZCUNCiAgICBVbnRpbD5zaG93a2s+JUNpcmNsZU1heCUNCiAgICBJZj5lcmFzZT0wDQogICAgICBMZXQ+ZXJhc2U9MQ0KICAgIEVsc2UNCiAgICAgIExldD5lcmFzZT0wDQogICAgRW5kSWYNCiAgICBMaWJGdW5jPmdkaTMyLERlbGV0ZU9iamVjdCxET3JlcyxQZW5yZXMNCiAgR290bz5yZXJ1bg0KZW5kPkdvQXJvdW5kDQoNClNSVD5EcmF3TGluZQ0KICBMaWJmdW5jPmdkaTMyLE1vdmVUb0V4LG10cmVzLEhEQywlRHJhd0xpbmVfdmFyXzQlLCVEcmF3TGluZV92YXJfNSUsMA0KICBMaWJGdW5jPmdkaTMyLExpbmVUbyxsdHJlcyxoZGMsJURyYXdMaW5lX3Zhcl82JSwlRHJhd0xpbmVfdmFyXzclDQpFTkQ+RHJhd0xpbmUNCg0KU1JUPkNpcmNsZUxvY2F0aW9uDQogIExldD5jdXJ4PSVSb3RhdGVXYWl0X3Zhcl8yJQ0KICBMZXQ+Y3VyeT0lUm90YXRlV2FpdF92YXJfMyUNCiAgTGV0Pm9raz0tJXNwYWNpbmclDQogIFJlcGVhdD5va2sNCiAgICBhZGQ+b2trLCVzcGFjaW5nJQ0KICAgIC8vL0Rvbid0IGZvcmdldCB0aGlzIGlzIGluIHJhZGlhbnMgbm90IGRlZ3JlZXMNCiAgICBMZXQ+b3hwb3M9eyVDdXJ4JSsoJW91dGVyX3JhZGl1cyUqKGNvcyglb2trJSkpKX0NCiAgICBMZXQ+b3lwb3M9eyVDdXJ5JSsoJW91dGVyX3JhZGl1cyUqKHNpbiglb2trJSkpKX0NCiAgICBMZXQ+b3hwb3M9e3JvdW5kKCVveHBvcyUpfQ0KICAgIExldD5veXBvcz17cm91bmQoJW95cG9zJSl9DQogICAgTGV0Pm94cG9zXyVvS0slPSVveHBvcyUNCiAgICBMZXQ+b3lwb3NfJW9LSyU9JW95cG9zJQ0KICBVbnRpbD5va2s+JUNpcmNsZU1heCUNCiAgTGV0Pmlraz0tJXNwYWNpbmclDQogIFJlcGVhdD5pa2sNCiAgICBhZGQ+aWtrLCVzcGFjaW5nJQ0KICAgIC8vL0Rvbid0IGZvcmdldCB0aGlzIGlzIGluIHJhZGlhbnMgbm90IGRlZ3JlZXMNCiAgICBMZXQ+aXhwb3M9eyVDdXJ4JSsoJWlubmVyX3JhZGl1cyUqKGNvcyglaWtrJSkpKX0NCiAgICBMZXQ+aXlwb3M9eyVDdXJ5JSsoJWlubmVyX3JhZGl1cyUqKHNpbiglaWtrJSkpKX0NCiAgICBMZXQ+aXhwb3M9e3JvdW5kKCVpeHBvcyUpfQ0KICAgIExldD5peXBvcz17cm91bmQoJWl5cG9zJSl9DQogICAgTGV0Pml4cG9zXyVpS0slPSVpeHBvcyUNCiAgICBMZXQ+aXlwb3NfJWlLSyU9JWl5cG9zJQ0KICBVbnRpbD5pa2s+JUNpcmNsZU1heCUNCkVORD5DaXJjbGVMb2NhdGlvbg0KRU5EPlJvdGF0ZVdhaXR=
    Base64>ScriptFile,DECODE,ScriptFile
  StringReplace>ScriptFile,WinHandle,%Dialog1.handle%,ScriptFile
  StringReplace>ScriptFile,Xcenter,288,ScriptFile
  StringReplace>ScriptFile,Ycenter,90,ScriptFile
  StringReplace>ScriptFile,OSradius,15,ScriptFile
  StringReplace>ScriptFile,ISRadius,15,ScriptFile
  StringReplace>ScriptFile,Rotqty,12,ScriptFile
  StringReplace>ScriptFile,Rotspeed,12,ScriptFile
  StringReplace>ScriptFile,Rotsize,7,ScriptFile
  //Make the next repacement value null for random colors. eg:
  //StringReplace>ScriptFile,Rotcolor,,ScriptFile
  StringReplace>ScriptFile,Rotcolor,7285260,ScriptFile
    WriteLn>%temp_dir%pleasewait.scp,wres,ScriptFile
    ExecuteFile>%temp_dir%pleasewait.scp
    LibFunc>User32,EnableWindow,EWres7,Dialog1.msEdit1.handle,0
    LibFunc>User32,EnableWindow,EWres7,Dialog1.msEdit2.handle,0
    LibFunc>User32,EnableWindow,EWres7,Dialog1.msButton1.handle,0
    LibFunc>User32,EnableWindow,EWres7,Dialog1.msButton2.handle,0
  Wait>%dialog1.msEdit2%
    WriteLn>%temp_dir%CloseWaitDialog.txt,wres,0
    DeleteFile>%temp_dir%pleasewait.scp
END>Process

Post Reply
Sign up to our newsletter for free automation tips, tricks & discounts