WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Samples

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

File Copy Progress Bar In Winbatch Dialog


IntControl (5, 1, 0, 0, 0) ;PROCESS SYSTEM AND HIDDEN FILES
GoSub LOAD_UDFS


#DefineSubRoutine DEFAULT(DIALOGHANDLE,MSG,CONTROLNUM,P4,P5)
Select MSG
Case 0 ;INITIALIZE
   DialogProcOptions(DIALOGHANDLE,2,1) ;ENABLE PUSH BUTTONS
   STATUSBAR=BARCREATE(95,115,370,20,PBS_SMOOTH,DIALOGHANDLE) ;CREATE THE STATUS BAR
   Return -2
Break

;----------------------------------------------------------------------------------
Case 1 ;TIMER CONTROL
   DialogProcOptions(DIALOGHANDLE,1,0) ;TIMER STOP
   DialogProcOptions(DIALOGHANDLE,1000,2) ;ALLOW THE DIALOG BOX TO RE-DRAW ITSELF AND SHOW A WAIT CURSOR

   ;DECLARE THE TEMP FILE TO USE
   TEMPFILE = StrCat(Environment("TEMP"),"\FILECOPY.TMP")

   ;GET THE LIST OF DIRECTORIES TO CREATE
   RunHideWait(Environment("COMSPEC"),StrCat('/C DIR "',SOURCE,'" /A:D /S /B >"',TEMPFILE,'"'));PUMP OUT ALL OF THE SOURCE DIRS TO A TEMP FILE
   DIRLIST = FileGet(TEMPFILE) ;GET THE CONTENTS OF THE TEMP FILE
   DIRLIST = StrReplace(DIRLIST,@CRLF,@TAB) ;CHANGE THE DELIMINATOR
   DIRCOUNT = ItemCount(DIRLIST,@TAB) - 1 ;GET THE TOTAL NUMBER OF DIRS TO BE CREATED

   ;CREATE THE DIRECTORY TREE
   A = 1
   For A = 1 To DIRCOUNT
      DIRECTORY = ItemExtract(A,DIRLIST,@TAB)
      DIRECTORY = StrReplace(DIRECTORY,SOURCE,DESTINATION)
      DirMake(DIRECTORY)
   Next

   ;GET THE LIST OF FILES TO COPY
   RunHideWait(Environment("COMSPEC"),StrCat('/C DIR "',SOURCE,'" /A:-D /S /B >"',TEMPFILE,'"'));PUMP OUT ALL OF THE SOURCE FILES TO A TEMP FILE
   FILELIST = FileGet(TEMPFILE) ;GET THE CONTENTS OF THE TEMP FILE
   FILELIST = StrReplace(FILELIST,@CRLF,@TAB) ;CHANGE THE DELIMINATOR
   FILECOUNT = ItemCount(FILELIST,@TAB) - 1 ;GET THE TOTAL NUMBER OF FILES TO BE COPIED

   ;SET UP/RESET THE STATUS BAR
   BARSETPOS(STATUSBAR,0) ;RESET THE STATUS BAR TO ZERO
   BARSETRANGE(STATUSBAR,0,FILECOUNT) ;SET THE NUMBER OF TICKS THE BAR WILL HAVE
   BARSETSTEP(STATUSBAR,1) ;SET THE NUMBER OF TICKS A STEP WILL HAVE
   BARSETBARCOLOUR(STATUSBAR,SETCOLOUR(0,0,160)) ;SET THE COLOR OF THE BAR
   DialogControlSet(DIALOGHANDLE,8,4,"0%%") ;SET THE PERCENT COUNTER TO ZERO
   LASTPERCENT = "0"

   A = 1
   For A = 1 To FILECOUNT
      SOURCEFILE = ItemExtract(A,FILELIST,@TAB) ;GET THE NEXT FILE IN THE LIST OF FILES
      DialogControlSet(DIALOGHANDLE,7,4,SOURCEFILE) ;UPDATE THE DIALOG WITH THE CURRENT SOURCE FILE NAME
      DESTINATIONFILE = StrReplace(SOURCEFILE,SOURCE,DESTINATION);CALCULATE THE DESTINATION FILE NAME
      COPYFILE = FileCopy(SOURCEFILE,DESTINATIONFILE,@FALSE) ;COPY THE FILE.  OVERWRITE IF ALREADY EXISTS
      If COPYFILE == @FALSE Then
         If StrIndexNC(FileAttrGet(DESTINATIONFILE),"-R",1,@FWDSCAN) == 0 Then ;IF THE COPY FAILED, IT MAY BE BECAUSE THERE IS ALREADY A DESTINATION FILE SET AS READ ONLY.
            FileAttrSet(DESTINATIONFILE,"r") ;IF SO, REMOVE THE READ ONLY FLAG
            COPYFILE = FileCopy(SOURCEFILE,DESTINATIONFILE,@FALSE) ;TRY COPYING THE FILE AGAIN
            If COPYFILE == @FALSE Then
               ;IF WE STILL FAIL, ASK THE USER IF THE WANT TO CONTINUE.
               If AskYesNo(StrCat("File Copy Failed.  Error Code: ",LastError()),StrCat("Failed to copy",@CRLF,SOURCEFILE,@CRLF,"to",@CRLF,DESTINATIONFILE,@CRLF,@CRLF,"Do you want to continue anyway?")) == @NO Then Return -2
            End If
            FileAttrSet(DESTINATIONFILE,"R") ;IF SUCCESSFUL, SET THE READ ONLY ATTRIBUTE BACK
         Else
            If AskYesNo(StrCat("File Copy Failed.  Error Code: ",LastError()),StrCat("Failed to copy",@CRLF,SOURCEFILE,@CRLF,"to",@CRLF,DESTINATIONFILE,@CRLF,@CRLF,"Do you want to continue anyway?")) == @NO Then Return -2
         End If
      End If

      ;UPDATE THE PERCENT COMPLETE COUNTER
      PERCENT = A / StrCat(FILECOUNT,".0")
      Decimals(0)
      PERCENT = PERCENT * 100
      If PERCENT != LASTPERCENT Then
         DialogControlSet(DIALOGHANDLE,8,4,StrCat(PERCENT,"%%"))
         LASTPERCENT = PERCENT
      End If
      BARSTEPIT(STATUSBAR) ;INCREMENT THE STATUS BAR BY 1 STEP
   Next
   DialogControlSet(DIALOGHANDLE,7,4,"") ;CLEAR THE DIALOG OF THE SOURCE FILE NAME
   Message("Done","Copy job is complete.")
   Return -2
Break
;----------------------------------------------------------------------------------



;----------------------------------------------------------------------------------
Case 2 ;BUTTON PUSHED
   If CONTROLNUM == 1 Then ;BROWSE SOURCE BUTTON
      SOURCE = AskDirectory("Select The Source Directory", "", "","",4)
      DialogControlSet(DIALOGHANDLE,5,3,SOURCE)
   End If

   If CONTROLNUM == 2 Then ;BROWSE DESTINATION BUTTON
      DESTINATION = AskDirectory("Select The Destination Directory", "", "","",4)
      DialogControlSet(DIALOGHANDLE,6,3,DESTINATION)
   End If

   If CONTROLNUM == 3 Then ;CANCEL BUTTON
      Exit
   End If

   If CONTROLNUM == 4 Then ;COPY BUTTON
      SOURCE = DialogControlGet(DIALOGHANDLE,5,3)
      DESTINATION = DialogControlGet(DIALOGHANDLE,6,3)
      If SOURCE == "" Then Return -2  ;NO SOURCE SPECIFIED
      If DESTINATION == "" Then Return -2 ;NO DESTINATION SPECIFIED
      If AskYesNo("Begin Copy Job?",StrCat("Do you want to start copying all files and folders in",@CRLF,SOURCE,@CRLF,"to",@CRLF,DESTINATION)) == @NO Then Return -2
      DialogProcOptions(DIALOGHANDLE,1,1) ;TIMER START
   End If

   :CANCEL
   Return -2
Break
;----------------------------------------------------------------------------------
End Select
#EndSubRoutine

MyDialogFormat=`WWWDLGED,6.1`

MyDialogCaption=`File Copy With Progress Bar`
MyDialogX=5000
MyDialogY=5000
MyDialogWidth=290
MyDialogHeight=105
MyDialogNumControls=010
MyDialogProcedure=`DEFAULT`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`
MyDialogConfig=0

MyDialog001=`235,019,036,012,PUSHBUTTON,DEFAULT,"Browse",3,3,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`235,039,036,012,PUSHBUTTON,DEFAULT,"Browse",4,4,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog003=`147,083,036,012,PUSHBUTTON,DEFAULT,"Cancel",2,2,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog004=`103,083,036,012,PUSHBUTTON,DEFAULT,"Copy",1,1,32,DEFAULT,DEFAULT,DEFAULT`
MyDialog005=`047,019,186,012,EDITBOX,SOURCE,DEFAULT,DEFAULT,5,8,DEFAULT,DEFAULT,"255|255|255"`
MyDialog006=`047,039,186,012,EDITBOX,DESTINATION,DEFAULT,DEFAULT,6,8,DEFAULT,DEFAULT,"255|255|255"`
MyDialog007=`-01,071,288,008,VARYTEXT,SOURCEFILE,DEFAULT,DEFAULT,1,512,DEFAULT,DEFAULT,DEFAULT`
MyDialog008=`239,061,044,012,VARYTEXT,PERCENT,DEFAULT,DEFAULT,16,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog009=`021,021,022,008,STATICTEXT,DEFAULT,"Source:",DEFAULT,4,1024,DEFAULT,DEFAULT,DEFAULT`
MyDialog010=`013,041,030,008,STATICTEXT,DEFAULT,"Destination:",DEFAULT,4,1024,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("MyDialog")

Exit








:LOAD_UDFS

PBS_SMOOTH = 1
PBS_VERTICAL = 4

#DefineFunction BarCreate(x,y,w,h,style,handle)
   user32=StrCat(DirWindows(1),"user32.dll")
   hinst=DllHinst("")
   Return DllCall(user32,long:"CreateWindowExA",long:512,lpstr:"msctls_progress32",lpstr:"",long:1073741824|268435456|style,long:x,long:y,long:w,long:h,long:handle,long:0,long:hinst,long:0)
#EndFunction

#DefineFunction BarGetPos(handle)
   WM_USER = 1024
   PBM_GETPOS = WM_USER + 8
   user32=StrCat(DirWindows(1),"user32.dll")
   Return DllCall(user32,long:"SendMessageA",long:handle,long:PBM_GETPOS,long:0,long:0)
#EndFunction

#DefineFunction BarSetPos(handle,position)
   WM_USER = 1024
   PBM_SETPOS = WM_USER + 2
   user32=StrCat(DirWindows(1),"user32.dll")
   Return DllCall(user32,long:"SendMessageA",long:handle,long:PBM_SETPOS,long:position,long:0)
#EndFunction

#DefineFunction BarGetPos(handle,position)
   WM_USER = 1024
   PBM_GETPOS = WM_USER + 8
   user32=StrCat(DirWindows(1),"user32.dll")
   Return DllCall(user32,long:"SendMessageA",long:handle,long:PBM_GETPOS,long:0,long:0)
#EndFunction

#DefineFunction BarSetRange(handle,low,high)
   WM_USER = 1024
   PBM_SETRANGE32 = WM_USER + 6
   user32=StrCat(DirWindows(1),"user32.dll")
   RANGE=BinaryAlloc(8)
   BinaryPoke4(RANGE,0,low)
   BinaryPoke4(RANGE,4,high)
   val = DllCall(user32,long:"SendMessageA",long:handle,long:PBM_SETRANGE32,long:low,long:high)
   BinaryFree(RANGE)
   Return val
#EndFunction

#DefineFunction BarSetStep(handle,step)
   WM_USER = 1024
   PBM_SETSTEP = WM_USER + 4
   user32=StrCat(DirWindows(1),"user32.dll")
   val = DllCall(user32,long:"SendMessageA",long:handle,long:PBM_SETSTEP,long:step,long:0)
   Return val
#EndFunction

#DefineFunction BarStepIt(handle)
   WM_USER = 1024
   PBM_STEPIT = WM_USER + 5
   user32=StrCat(DirWindows(1),"user32.dll")
   val = DllCall(user32,long:"SendMessageA",long:handle,long:PBM_STEPIT,long:0,long:0)
   Return val
#EndFunction

#DefineFunction BarSetBarColour(handle,colour)
   WM_USER = 1024
   PBM_SETBARCOLOR = WM_USER + 9
   user32=StrCat(DirWindows(1),"user32.dll")
   val = DllCall(user32,long:"SendMessageA",long:handle,long:PBM_SETBARCOLOR,long:0,long:colour)
   Return val
#EndFunction

#DefineFunction SetColour(red,green,blue)
  Return ((red mod 256)+(green mod 256)*256+(blue mod 256)*256*256)
#EndFunction


Return


Article ID:   W17780
Filename:   File Copy Progress Bar In Winbatch Dialog.txt
File Created: 2008:11:25:12:43:56
Last Updated: 2008:11:25:12:43:56