Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.
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