crashnburn Posted July 11, 2013 Share Posted July 11, 2013 (edited) expandcollapse popupGlobal $users[1] $drive = InputBox("Enter Drive Letter Of Customers Hard Drive") $folder = $drive & ":\Users" If FileExists($folder) Then $folderpath = $drive & ":\Users" MsgBox(0, "test", $folderpath) Else $folderpath = $drive & ":\Documents and Settings" MsgBox(0, "test", $folderpath) EndIf $folders = _filelisttoarray($folderpath) $num = UBound($folders) For $i = 1 To $num - 1 IniWrite("Settings\boxes.ini", "boxes", $i, $folders[$i]) Next $sini = "Settings\boxes.ini" $hgui = GUICreate("Select User Folders", 175, 400) $adata = IniReadSection($sini, "boxes") $icount = $adata[0][0] Global $acheck[$icount + 1] For $i = 1 To $icount $acheck[$i] = GUICtrlCreateCheckbox($adata[$i][1], 10, $i * 20, 300, 20) Next $sub = GUICtrlCreateButton("Submit", 10, 350, 155, 40, 1, 256) GUISetState() Do $msg = GUIGetMsg() If $msg = $sub Then For $i = 1 To $icount If GUICtrlRead($acheck[$i]) = $gui_checked Then $temp = $adata[$i][1] IniWrite("Settings\users.ini", "users", $i, $adata[$i][1]) EndIf Next EndIf Until $msg = $sub $uini = "Settings\users.ini" GUISetState(@SW_HIDE) $udata = IniReadSection($uini, "users") $bcount = $udata[0][0] If FileExists($folderpath & "\Users") Then For $i = 1 To $bcount If FileExists($folderpath & "\" & $udata[$i][1] & "\Contacts") Then If FileExists("Z:\" & $udata[$i][1] & "\Contacts\") Then MsgBox(0, "test", "Not needed") $contacts = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Contacts", "Z:\" & $udata[$i][1] & "\Contacts\") Else irCreate("Z:\" & $udata[$i][1] & "\Contacts\") $contacts = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Contacts", "Z:\" & $udata[$i][1] & "\Contacts\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Contacts") = DirGetSize("Z:\" & $udata[$i][1] & "\Contacts\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Desktop") Then If FileExists("Z:\" & $udata[$i][1] & "\Desktop\") Then $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Desktop", "Z:\" & $udata[$i][1] & "\Desktop\") Else DirCreate("Z:\" & $udata[$i][1] & "\Desktop\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Desktop", "Z:\" & $udata[$i][1] & "\Desktop\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Desktop") = DirGetSize("Z:\" & $udata[$i][1] & "\Desktop\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Downloads") Then If FileExists("Z:\" & $udata[$i][1] & "\Downloads\") Then $downloads = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Downloads", "Z:\" & $udata[$i][1] & "\Downloads\") Else DirCreate("Z:\" & $udata[$i][1] & "\Downloads\") $downloads = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Downloads", "Z:\" & $udata[$i][1] & "\Downloads\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Downloads") = DirGetSize("Z:\" & $udata[$i][1] & "\Downloads\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Favorites") Then If FileExists("Z:\" & $udata[$i][1] & "\Favorites\") Then $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Favorites", "Z:\" & $udata[$i][1] & "\Favorites\") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Favorites", "Z:\" & $udata[$i][1] & "\Favorites\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Favorites") = DirGetSize("Z:\" & $udata[$i][1] & "\Favorites\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Documents") Then If FileExists("Z:\" & $udata[$i][1] & "\Documents") Then $docs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Documents", "Z:\" & $udata[$i][1] & "\Documents") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $docs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Documents", "Z:\" & $udata[$i][1] & "\Documents\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Documents") = DirGetSize("Z:\" & $udata[$i][1] & "\Documents\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Music") Then If FileExists("Z:\" & $udata[$i][1] & "\Music") Then $music = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Music", "Z:\" & $udata[$i][1] & "\Music") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $music = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Music", "Z:\" & $udata[$i][1] & "\Music\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Music") = DirGetSize("Z:\" & $udata[$i][1] & "\Music\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Pictures") Then If FileExists("Z:\" & $udata[$i][1] & "\Pictures") Then $pics = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Pictures", "Z:\" & $udata[$i][1] & "\Pictures") Else DirCreate("Z:\" & $udata[$i][1] & "\Pictures\") $pics = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Pictures", "Z:\" & $udata[$i][1] & "\Pictures\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Pictures") = DirGetSize("Z:\" & $udata[$i][1] & "\Pictures\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Videos") Then If FileExists("Z:\" & $udata[$i][1] & "\Videos") Then $vids = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Videos", "Z:\" & $udata[$i][1] & "\Videos") Else DirCreate("Z:\" & $udata[$i][1] & "\Videos\") $vids = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Videos", "Z:\" & $udata[$i][1] & "\Videos\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Videos") = DirGetSize("Z:\" & $udata[$i][1] & "\Videos\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\AppData\Local\Microsoft\Outlook" Then If FileExists("Z:\" & $udata[$i][1] & "Outlook" Then $out = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\AppData\Local\Microsoft\Outlook", "Z:\" & $udata[$i][1] & "\Outlook") Else DirCreate("Z:\" & $udata[$i][1] & "\Outlook\") $out = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\AppData\Local\Microsoft\Outlook", "Z:\" & $udata[$i][1] & "\Outlook") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\AppData\Local\Microsoft\Outlook") = DirGetSize("Z:\" & $udata[$i][1] & "\Outlook\") Else Return 0 EndIf Run(@ComSpec & " /c " & "del /s Z:\" & $udata[$i][1] & "\desktop.ini") Next Else For $i = 1 To $bcount If FileExists($folderpath & "\" & $udata[$i][1] & "\Desktop") Then If FileExists("Z:\" & $udata[$i][1] & "\Desktop\") Then $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Desktop", "Z:\" & $udata[$i][1] & "\Desktop\") Else DirCreate("Z:\" & $udata[$i][1] & "\Desktop\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Desktop", "Z:\" & $udata[$i][1] & "\Desktop\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Desktop") = DirGetSize("Z:\" & $udata[$i][1] & "\Desktop\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Favorites") Then If FileExists("Z:\" & $udata[$i][1] & "\Favorites\") Then $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Favorites", "Z:\" & $udata[$i][1] & "\Favorites\") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Favorites", "Z:\" & $udata[$i][1] & "\Favorites\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Favorites") = DirGetSize("Z:\" & $udata[$i][1] & "\Favorites\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "'s Documents") Then If FileExists("Z:\" & $udata[$i][1] & "'s Documents") Then $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "'s Documents", "Z:\" & $udata[$i][1] & "'s Documents") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "'s Documents", "Z:\" & $udata[$i][1] & "'s Documents") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "'s Documents") = DirGetSize("Z:\" & $udata[$i][1] & "'s Documents") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Application Data\Microsoft\Outlook" Then If FileExists("Z:\" & $udata[$i][1] & "Outlook" Then $out = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Application Data\Microsoft\Outlook", "Z:\" & $udata[$i][1] & "\Outlook") Else DirCreate("Z:\" & $udata[$i][1] & "\Outlook\") $out = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Application Data\Microsoft\Outlook", "Z:\" & $udata[$i][1] & "\Outlook") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Application Data\Microsoft\Outlook\") = DirGetSize("Z:\" & $udata[$i][1] & "\Outlook\") Else Return 0 EndIf RunWait(@ComSpec & " /c " & "del /s Z:\" & $udata[$i][1] & "\desktop.ini", "", @SW_HIDE) Next EndIf FileDelete(@ScriptDir & "\Settings\boxes.ini") FileDelete(@ScriptDir & "\Settings\users.ini") Func _copydirwithprogress($soriginaldir, $sdestdir) If StringRight($soriginaldir, 1) <> "\" Then $soriginaldir = $soriginaldir & "\" If StringRight($sdestdir, 1) <> "\" Then $sdestdir = $sdestdir & "\" If $soriginaldir = $sdestdir Then Return - 1 ProgressOn("Copying...", "Making list of files..." & @LF & @LF, "", -1, -1, 18) Local $afilelist = _filesearch($soriginaldir) If $afilelist[0] = 0 Then ProgressOff() SetError(1) Return - 1 EndIf If FileExists($sdestdir) Then If NOT StringInStr(FileGetAttrib($sdestdir), "d") Then ProgressOff() SetError(2) Return - 1 EndIf Else DirCreate($sdestdir) If NOT FileExists($sdestdir) Then ProgressOff() SetError(2) Return - 1 EndIf EndIf Local $idirsize, $icopiedsize = 0, $fprogress = 0 Local $c, $filename, $ioutput = 0, $slost = "", $serror Local $sl = StringLen($soriginaldir) _quick_sort($afilelist, 1, $afilelist[0]) $idirsize = Int(DirGetSize($soriginaldir) / 1024) ProgressSet(Int($fprogress * 100), $afilelist[$c], "Coping file:") For $c = 1 To $afilelist[0] $filename = StringTrimLeft($afilelist[$c], $sl) ProgressSet(Int($fprogress * 100), $afilelist[$c] & " -> " & $sdestdir & $filename & @LF & "Total KiB: " & $idirsize & @LF & "Done KiB: " & $icopiedsize, "Coping file: " & Round($fprogress * 100, 2) & " % " & $c & "/" & $afilelist[0]) If StringInStr(FileGetAttrib($afilelist[$c]), "d") Then DirCreate($sdestdir & $filename) Else If NOT FileCopy($afilelist[$c], $sdestdir & $filename, 1) Then If NOT FileCopy($afilelist[$c], $sdestdir & $filename, 1) Then If RunWait(@ComSpec & ' /c copy /y "' & $afilelist[$c] & '" "' & $sdestdir & $filename & '">' & @TempDir & "\o.tmp", "", @SW_HIDE) = 1 Then $serror = FileReadLine(@TempDir & "\o.tmp", 1) $ioutput = $ioutput + 1 $slost = $slost & $afilelist[$c] & " " & $serror & @CRLF EndIf FileDelete(@TempDir & "\o.tmp") EndIf EndIf FileSetAttrib($sdestdir & $filename, "+A-RSH") $icopiedsize = $icopiedsize + Int(FileGetSize($afilelist[$c]) / 1024) $fprogress = $icopiedsize / $idirsize EndIf Next ProgressOff() If $slost <> "" Then If FileWrite($sdestdir & "notcopied.txt", $slost) = 0 Then If FileWrite($soriginaldir & "notcopied.txt", $slost) = 0 Then FileWrite(@WorkingDir & "\notcopied.txt", $slost) EndIf EndIf EndIf Return $ioutput EndFunc Func _filesearch($sistr, $bsf = 1) Local $scriteria, $sbuffer, $ih, $ih2, $scs, $scf, $scf2, $scp, $sfp, $soutput = "", $anull[1] $scp = StringLeft($sistr, StringInStr($sistr, "\", 0, -1)) If $scp = "" Then $scp = @WorkingDir & "\" $scriteria = StringTrimLeft($sistr, StringInStr($sistr, "\", 0, -1)) If $scriteria = "" Then $scriteria = "*.*" $scs = FileFindFirstFile($scp & $scriteria) If $scs <> -1 Then Do $scf = FileFindNextFile($scs) If @error Then FileClose($scs) ExitLoop EndIf If $scf = "." OR $scf = ".." Then ContinueLoop $soutput = $soutput & $scp & $scf & @LF Until 0 EndIf If $bsf = 1 Then $sbuffer = @CR & $scp & "*" & @LF Do $scs = StringTrimLeft(StringLeft($sbuffer, StringInStr($sbuffer, @LF, 0, 1) - 1), 1) $scp = StringLeft($scs, StringInStr($scs, "\", 0, -1)) $ih = FileFindFirstFile($scs) If $ih <> -1 Then Do $scf = FileFindNextFile($ih) If @error Then FileClose($ih) ExitLoop EndIf If $scf = "." OR $scf = ".." Then ContinueLoop If StringInStr(FileGetAttrib($scp & $scf), "d") Then $sbuffer = @CR & $scp & $scf & "\*" & @LF & $sbuffer $sfp = $scp & $scf & "\" $ih2 = FileFindFirstFile($sfp & $scriteria) If $ih2 <> -1 Then Do $scf2 = FileFindNextFile($ih2) If @error Then FileClose($ih2) ExitLoop EndIf If $scf2 = "." OR $scf2 = ".." Then ContinueLoop $soutput = $soutput & $sfp & $scf2 & @LF Until 0 EndIf EndIf Until 0 EndIf $sbuffer = StringReplace($sbuffer, @CR & $scs & @LF, "") Until $sbuffer = "" EndIf If $soutput = "" Then $anull[0] = 0 Return $anull Else Return StringSplit(StringTrimRight($soutput, 1), @LF) EndIf EndFunc Func _quick_sort(ByRef $sortarray, $first, $last) Dim $low, $high Dim $temp, $list_separator $low = $first $high = $last $list_separator = StringLen($sortarray[($first + $last) / 2]) Do While (StringLen($sortarray[$low]) < $list_separator) $low = $low + 1 WEnd While (StringLen($sortarray[$high]) > $list_separator) $high = $high - 1 WEnd If ($low <= $high) Then $temp = $sortarray[$low] $sortarray[$low] = $sortarray[$high] $sortarray[$high] = $temp $low = $low + 1 $high = $high - 1 EndIf Until $low > $high If ($first < $high) Then _quick_sort($sortarray, $first, $high) If ($low < $last) Then _quick_sort($sortarray, $low, $last) EndFunc So I am trying to make a script to do backups. I am a tech and need to take internal drives out and hook them up externally to another machine to back up the info before replacing the drive.The progress section works perfect and was not made by me. Before the actual backup section I have If FileExists($folderpath * "Users") Then This checks if the computer is post XP. I have setup message boxes to verify that it is pulling the correct path, it is. But for some reason with XP drives it still tries to run the first part of the IF statement not the ELSE section. It always errors out because XP doesn't have the same folder structure. I am not sure how else to have it check if it is XP or later or how to make it just work the way it is. Can anyone point me in the right direction? Thank you in advance for any input in the matter. Edited July 11, 2013 by crashnburn Link to comment Share on other sites More sharing options...
0xdefea7 Posted July 11, 2013 Share Posted July 11, 2013 (edited) Try this: FileExists($folderpath) You already set folderpath above to be either the Users folder (Win 7/Vista/8) or Docs and Settings for XP. So for XP, you were essentially checking for "C:Documents and SettingsUsers" How to check OS: @OSVersion macro Edited July 11, 2013 by 0xdefea7 Link to comment Share on other sites More sharing options...
crashnburn Posted July 11, 2013 Author Share Posted July 11, 2013 (edited) The only reason I haven't used the @OSVersion is because I take the drive out of it's original computer and hook it up externally to a windows 7 machine made specifically for the task of transferring data. It's kind of a data mule if you would. As far as I know if I use the @OSVersion it will pull the OS of the Windows 7 machine and not the drive that needs to be backed up. I do see what you are saying about the just using the $folderpath. I will try that now. Thank you for your time. EDIT: Ok so I tried using the $folderpath and now I am getting an error @ line 1285  error invalid keyword at the start of this line. line 1285 is: $folderpath = $drive & ":Users" EDIT 2 : I think I know why. If I set it to $folderpath while it equals C:Documents and Settings then the code reads If FileExists(C:Documents and Settings) Then Run Non XP Backup Else Run XP Backup Which wouldn't work. I am going to try using $drive "Users". Ill post results. EDIT 3: So now I am receiving the same error but for this line of code: $out = _copydirwithprogress($folderpath & "" & $udata[$i][1] & "AppDataLocalMicrosoftOutlook", "Z:" & $udata[$i][1] & "Outlook") Odd thing is that it does start to do the backup with the correct folder structure but errors out on the section not being used. Edited July 11, 2013 by crashnburn Link to comment Share on other sites More sharing options...
Solution orbs Posted July 11, 2013 Solution Share Posted July 11, 2013 ehm... your original code works fine for me, on Windoes 7 & XP - except for a syntax error calling InputBox. please post your code as you go along, and if possible, after you have validated it for syntax errors. Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration -  literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff  Link to comment Share on other sites More sharing options...
crashnburn Posted July 11, 2013 Author Share Posted July 11, 2013 (edited) As requested here is my full code. Long story as to why the #include files are inside the code, it makes it very long and for that I am sorry. My code is towards the bottom. EDIT: Sorry I got a little overzealous and posted before your requested tasks were done. I will learn how to validate for errors, do it, then get back to you. expandcollapse popupGlobal Const $gui_event_close = -3 Global Const $gui_event_minimize = -4 Global Const $gui_event_restore = -5 Global Const $gui_event_maximize = -6 Global Const $gui_event_primarydown = -7 Global Const $gui_event_primaryup = -8 Global Const $gui_event_secondarydown = -9 Global Const $gui_event_secondaryup = -10 Global Const $gui_event_mousemove = -11 Global Const $gui_event_resized = -12 Global Const $gui_event_dropped = -13 Global Const $gui_rundefmsg = "GUI_RUNDEFMSG" Global Const $gui_avistop = 0 Global Const $gui_avistart = 1 Global Const $gui_aviclose = 2 Global Const $gui_checked = 1 Global Const $gui_indeterminate = 2 Global Const $gui_unchecked = 4 Global Const $gui_dropaccepted = 8 Global Const $gui_nodropaccepted = 4096 Global Const $gui_acceptfiles = $gui_dropaccepted Global Const $gui_show = 16 Global Const $gui_hide = 32 Global Const $gui_enable = 64 Global Const $gui_disable = 128 Global Const $gui_focus = 256 Global Const $gui_nofocus = 8192 Global Const $gui_defbutton = 512 Global Const $gui_expand = 1024 Global Const $gui_ontop = 2048 Global Const $gui_fontitalic = 2 Global Const $gui_fontunder = 4 Global Const $gui_fontstrike = 8 Global Const $gui_dockauto = 1 Global Const $gui_dockleft = 2 Global Const $gui_dockright = 4 Global Const $gui_dockhcenter = 8 Global Const $gui_docktop = 32 Global Const $gui_dockbottom = 64 Global Const $gui_dockvcenter = 128 Global Const $gui_dockwidth = 256 Global Const $gui_dockheight = 512 Global Const $gui_docksize = 768 Global Const $gui_dockmenubar = 544 Global Const $gui_dockstatebar = 576 Global Const $gui_dockall = 802 Global Const $gui_dockborders = 102 Global Const $gui_gr_close = 1 Global Const $gui_gr_line = 2 Global Const $gui_gr_bezier = 4 Global Const $gui_gr_move = 6 Global Const $gui_gr_color = 8 Global Const $gui_gr_rect = 10 Global Const $gui_gr_ellipse = 12 Global Const $gui_gr_pie = 14 Global Const $gui_gr_dot = 16 Global Const $gui_gr_pixel = 18 Global Const $gui_gr_hint = 20 Global Const $gui_gr_refresh = 22 Global Const $gui_gr_pensize = 24 Global Const $gui_gr_nobkcolor = -2 Global Const $gui_bkcolor_default = -1 Global Const $gui_bkcolor_transparent = -2 Global Const $gui_bkcolor_lv_alternate = -33554432 Global Const $gui_ws_ex_parentdrag = 1048576 Global Const $fc_nooverwrite = 0 Global Const $fc_overwrite = 1 Global Const $ft_modified = 0 Global Const $ft_created = 1 Global Const $ft_accessed = 2 Global Const $fo_read = 0 Global Const $fo_append = 1 Global Const $fo_overwrite = 2 Global Const $fo_binary = 16 Global Const $fo_unicode = 32 Global Const $fo_utf16_le = 32 Global Const $fo_utf16_be = 64 Global Const $fo_utf8 = 128 Global Const $fo_utf8_nobom = 256 Global Const $eof = -1 Global Const $fd_filemustexist = 1 Global Const $fd_pathmustexist = 2 Global Const $fd_multiselect = 4 Global Const $fd_promptcreatenew = 8 Global Const $fd_promptoverwrite = 16 Global Const $create_new = 1 Global Const $create_always = 2 Global Const $open_existing = 3 Global Const $open_always = 4 Global Const $truncate_existing = 5 Global Const $invalid_set_file_pointer = -1 Global Const $file_begin = 0 Global Const $file_current = 1 Global Const $file_end = 2 Global Const $file_attribute_readonly = 1 Global Const $file_attribute_hidden = 2 Global Const $file_attribute_system = 4 Global Const $file_attribute_directory = 16 Global Const $file_attribute_archive = 32 Global Const $file_attribute_device = 64 Global Const $file_attribute_normal = 128 Global Const $file_attribute_temporary = 256 Global Const $file_attribute_sparse_file = 512 Global Const $file_attribute_reparse_point = 1024 Global Const $file_attribute_compressed = 2048 Global Const $file_attribute_offline = 4096 Global Const $file_attribute_not_content_indexed = 8192 Global Const $file_attribute_encrypted = 16384 Global Const $file_share_read = 1 Global Const $file_share_write = 2 Global Const $file_share_delete = 4 Global Const $generic_all = 268435456 Global Const $generic_execute = 536870912 Global Const $generic_write = 1073741824 Global Const $generic_read = -2147483648 Func _filecountlines($sfilepath) Local $hfile = FileOpen($sfilepath, $fo_read) If $hfile = -1 Then Return SetError(1, 0, 0) Local $sfilecontent = StringStripWS(FileRead($hfile), 2) FileClose($hfile) Local $atmp If StringInStr($sfilecontent, @LF) Then $atmp = StringSplit(StringStripCR($sfilecontent), @LF) ElseIf StringInStr($sfilecontent, @CR) Then $atmp = StringSplit($sfilecontent, @CR) Else If StringLen($sfilecontent) Then Return 1 Else Return SetError(2, 0, 0) EndIf EndIf Return $atmp[0] EndFunc Func _filecreate($sfilepath) Local $hopenfile = FileOpen($sfilepath, $fo_overwrite) If $hopenfile = -1 Then Return SetError(1, 0, 0) Local $hwritefile = FileWrite($hopenfile, "") FileClose($hopenfile) If $hwritefile = -1 Then Return SetError(2, 0, 0) Return 1 EndFunc Func _filelisttoarray($spath, $sfilter = "*", $iflag = 0) Local $hsearch, $sfile, $sfilelist, $sdelim = "|" $spath = StringRegExpReplace($spath, "[\\/]+\z", "") & "\" If NOT FileExists($spath) Then Return SetError(1, 1, "") If StringRegExp($sfilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "") If NOT ($iflag = 0 OR $iflag = 1 OR $iflag = 2) Then Return SetError(3, 3, "") $hsearch = FileFindFirstFile($spath & $sfilter) If @error Then Return SetError(4, 4, "") While 1 $sfile = FileFindNextFile($hsearch) If @error Then ExitLoop If ($iflag + @extended = 2) Then ContinueLoop $sfilelist &= $sdelim & $sfile WEnd FileClose($hsearch) If NOT $sfilelist Then Return SetError(4, 4, "") Return StringSplit(StringTrimLeft($sfilelist, 1), "|") EndFunc Func _fileprint($s_file, $i_show = @SW_HIDE) Local $a_ret = DllCall("shell32.dll", "int", "ShellExecuteW", "hwnd", 0, "wstr", "print", "wstr", $s_file, "wstr", "", "wstr", "", "int", $i_show) If @error Then Return SetError(@error, @extended, 0) If $a_ret[0] <= 32 Then Return SetError(10, $a_ret[0], 0) Return 1 EndFunc Func _filereadtoarray($sfilepath, ByRef $aarray) Local $hfile = FileOpen($sfilepath, $fo_read) If $hfile = -1 Then Return SetError(1, 0, 0) Local $afile = FileRead($hfile, FileGetSize($sfilepath)) If StringRight($afile, 1) = @LF Then $afile = StringTrimRight($afile, 1) If StringRight($afile, 1) = @CR Then $afile = StringTrimRight($afile, 1) FileClose($hfile) If StringInStr($afile, @LF) Then $aarray = StringSplit(StringStripCR($afile), @LF) ElseIf StringInStr($afile, @CR) Then $aarray = StringSplit($afile, @CR) Else If StringLen($afile) Then Dim $aarray[2] = [1, $afile] Else Return SetError(2, 0, 0) EndIf EndIf Return 1 EndFunc Func _filewritefromarray($file, $a_array, $i_base = 0, $i_ubound = 0, $s_delim = "|") If NOT IsArray($a_array) Then Return SetError(2, 0, 0) Local $idims = UBound($a_array, 0) If $idims > 2 Then Return SetError(4, 0, 0) Local $last = UBound($a_array) - 1 If $i_ubound < 1 OR $i_ubound > $last Then $i_ubound = $last If $i_base < 0 OR $i_base > $last Then $i_base = 0 Local $hfile If IsString($file) Then $hfile = FileOpen($file, $fo_overwrite) Else $hfile = $file EndIf If $hfile = -1 Then Return SetError(1, 0, 0) Local $errorsav = 0 Switch $idims Case 1 For $x = $i_base To $i_ubound If FileWrite($hfile, $a_array[$x] & @CRLF) = 0 Then $errorsav = 3 ExitLoop EndIf Next Case 2 Local $s_temp For $x = $i_base To $i_ubound $s_temp = $a_array[$x][0] For $y = 1 To $idims $s_temp &= $s_delim & $a_array[$x][$y] Next If FileWrite($hfile, $s_temp & @CRLF) = 0 Then $errorsav = 3 ExitLoop EndIf Next EndSwitch If IsString($file) Then FileClose($hfile) If $errorsav Then Return SetError($errorsav, 0, 0) Return 1 EndFunc Func _filewritelog($slogpath, $slogmsg, $iflag = -1) Local $hopenfile = $slogpath, $iopenmode = $fo_append Local $sdatenow = @YEAR & "-" & @MON & "-" & @MDAY Local $stimenow = @HOUR & ":" & @MIN & ":" & @SEC Local $smsg = $sdatenow & " " & $stimenow & " : " & $slogmsg If $iflag <> -1 Then $smsg &= @CRLF & FileRead($slogpath) $iopenmode = $fo_overwrite EndIf If IsString($slogpath) Then $hopenfile = FileOpen($slogpath, $iopenmode) If $hopenfile = -1 Then Return SetError(1, 0, 0) EndIf EndIf Local $ireturn = FileWriteLine($hopenfile, $smsg) If IsString($slogpath) Then $ireturn = FileClose($hopenfile) EndIf If $ireturn <= 0 Then Return SetError(2, $ireturn, 0) EndIf Return $ireturn EndFunc Func _filewritetoline($sfile, $iline, $stext, $foverwrite = 0) If $iline <= 0 Then Return SetError(4, 0, 0) If NOT IsString($stext) Then $stext = String($stext) If $stext = "" Then Return SetError(6, 0, 0) EndIf If $foverwrite <> 0 AND $foverwrite <> 1 Then Return SetError(5, 0, 0) If NOT FileExists($sfile) Then Return SetError(2, 0, 0) Local $sread_file = FileRead($sfile) Local $asplit_file = StringSplit(StringStripCR($sread_file), @LF) If UBound($asplit_file) < $iline Then Return SetError(1, 0, 0) Local $iencoding = FileGetEncoding($sfile) Local $hfile = FileOpen($sfile, $iencoding + $fo_overwrite) If $hfile = -1 Then Return SetError(3, 0, 0) $sread_file = "" For $i = 1 To $asplit_file[0] If $i = $iline Then If $foverwrite = 1 Then If $stext <> "" Then $sread_file &= $stext & @CRLF Else $sread_file &= $stext & @CRLF & $asplit_file[$i] & @CRLF EndIf ElseIf $i < $asplit_file[0] Then $sread_file &= $asplit_file[$i] & @CRLF ElseIf $i = $asplit_file[0] Then $sread_file &= $asplit_file[$i] EndIf Next FileWrite($hfile, $sread_file) FileClose($hfile) Return 1 EndFunc Func _pathfull($srelativepath, $sbasepath = @WorkingDir) If NOT $srelativepath OR $srelativepath = "." Then Return $sbasepath Local $sfullpath = StringReplace($srelativepath, "/", "\") Local Const $sfullpathconst = $sfullpath Local $spath Local $brootonly = StringLeft($sfullpath, 1) = "\" AND StringMid($sfullpath, 2, 1) <> "\" For $i = 1 To 2 $spath = StringLeft($sfullpath, 2) If $spath = "\\" Then $sfullpath = StringTrimLeft($sfullpath, 2) Local $nserverlen = StringInStr($sfullpath, "\") - 1 $spath = "\\" & StringLeft($sfullpath, $nserverlen) $sfullpath = StringTrimLeft($sfullpath, $nserverlen) ExitLoop ElseIf StringRight($spath, 1) = ":" Then $sfullpath = StringTrimLeft($sfullpath, 2) ExitLoop Else $sfullpath = $sbasepath & "\" & $sfullpath EndIf Next If $i = 3 Then Return "" If StringLeft($sfullpath, 1) <> "\" Then If StringLeft($sfullpathconst, 2) = StringLeft($sbasepath, 2) Then $sfullpath = $sbasepath & "\" & $sfullpath Else $sfullpath = "\" & $sfullpath EndIf EndIf Local $atemp = StringSplit($sfullpath, "\") Local $apathparts[$atemp[0]], $j = 0 For $i = 2 To $atemp[0] If $atemp[$i] = ".." Then If $j Then $j -= 1 ElseIf NOT ($atemp[$i] = "" AND $i <> $atemp[0]) AND $atemp[$i] <> "." Then $apathparts[$j] = $atemp[$i] $j += 1 EndIf Next $sfullpath = $spath If NOT $brootonly Then For $i = 0 To $j - 1 $sfullpath &= "\" & $apathparts[$i] Next Else $sfullpath &= $sfullpathconst If StringInStr($sfullpath, "..") Then $sfullpath = _pathfull($sfullpath) EndIf While StringInStr($sfullpath, ".\") $sfullpath = StringReplace($sfullpath, ".\", "\") WEnd Return $sfullpath EndFunc Func _pathgetrelative($sfrom, $sto) If StringRight($sfrom, 1) <> "\" Then $sfrom &= "\" If StringRight($sto, 1) <> "\" Then $sto &= "\" If $sfrom = $sto Then Return SetError(1, 0, StringTrimRight($sto, 1)) Local $asfrom = StringSplit($sfrom, "\") Local $asto = StringSplit($sto, "\") If $asfrom[1] <> $asto[1] Then Return SetError(2, 0, StringTrimRight($sto, 1)) Local $i = 2 Local $idiff = 1 While 1 If $asfrom[$i] <> $asto[$i] Then $idiff = $i ExitLoop EndIf $i += 1 WEnd $i = 1 Local $srelpath = "" For $j = 1 To $asto[0] If $i >= $idiff Then $srelpath &= "\" & $asto[$i] EndIf $i += 1 Next $srelpath = StringTrimLeft($srelpath, 1) $i = 1 For $j = 1 To $asfrom[0] If $i > $idiff Then $srelpath = "..\" & $srelpath EndIf $i += 1 Next If StringRight($srelpath, 1) == "\" Then $srelpath = StringTrimRight($srelpath, 1) Return $srelpath EndFunc Func _pathmake($szdrive, $szdir, $szfname, $szext) If StringLen($szdrive) Then If NOT (StringLeft($szdrive, 2) = "\\") Then $szdrive = StringLeft($szdrive, 1) & ":" EndIf If StringLen($szdir) Then If NOT (StringRight($szdir, 1) = "\") AND NOT (StringRight($szdir, 1) = "/") Then $szdir = $szdir & "\" EndIf If StringLen($szext) Then If NOT (StringLeft($szext, 1) = ".") Then $szext = "." & $szext EndIf Return $szdrive & $szdir & $szfname & $szext EndFunc Func _pathsplit($szpath, ByRef $szdrive, ByRef $szdir, ByRef $szfname, ByRef $szext) Local $drive = "" Local $dir = "" Local $fname = "" Local $ext = "" Local $pos Local $array[5] $array[0] = $szpath If StringMid($szpath, 2, 1) = ":" Then $drive = StringLeft($szpath, 2) $szpath = StringTrimLeft($szpath, 2) ElseIf StringLeft($szpath, 2) = "\\" Then $szpath = StringTrimLeft($szpath, 2) $pos = StringInStr($szpath, "\") If $pos = 0 Then $pos = StringInStr($szpath, "/") If $pos = 0 Then $drive = "\\" & $szpath $szpath = "" Else $drive = "\\" & StringLeft($szpath, $pos - 1) $szpath = StringTrimLeft($szpath, $pos - 1) EndIf EndIf Local $nposforward = StringInStr($szpath, "/", 0, -1) Local $nposbackward = StringInStr($szpath, "\", 0, -1) If $nposforward >= $nposbackward Then $pos = $nposforward Else $pos = $nposbackward EndIf $dir = StringLeft($szpath, $pos) $fname = StringRight($szpath, StringLen($szpath) - $pos) If StringLen($dir) = 0 Then $fname = $szpath $pos = StringInStr($fname, ".", 0, -1) If $pos Then $ext = StringRight($fname, StringLen($fname) - ($pos - 1)) $fname = StringLeft($fname, $pos - 1) EndIf $szdrive = $drive $szdir = $dir $szfname = $fname $szext = $ext $array[1] = $drive $array[2] = $dir $array[3] = $fname $array[4] = $ext Return $array EndFunc Func _replacestringinfile($szfilename, $szsearchstring, $szreplacestring, $fcaseness = 0, $foccurance = 1) Local $iretval = 0 Local $ncount, $sendswith If StringInStr(FileGetAttrib($szfilename), "R") Then Return SetError(6, 0, -1) Local $hfile = FileOpen($szfilename, $fo_read) If $hfile = -1 Then Return SetError(1, 0, -1) Local $s_totfile = FileRead($hfile, FileGetSize($szfilename)) If StringRight($s_totfile, 2) = @CRLF Then $sendswith = @CRLF ElseIf StringRight($s_totfile, 1) = @CR Then $sendswith = @CR ElseIf StringRight($s_totfile, 1) = @LF Then $sendswith = @LF Else $sendswith = "" EndIf Local $afilelines = StringSplit(StringStripCR($s_totfile), @LF) FileClose($hfile) Local $iencoding = FileGetEncoding($szfilename) Local $hwritehandle = FileOpen($szfilename, $iencoding + $fo_overwrite) If $hwritehandle = -1 Then Return SetError(2, 0, -1) For $ncount = 1 To $afilelines[0] If StringInStr($afilelines[$ncount], $szsearchstring, $fcaseness) Then $afilelines[$ncount] = StringReplace($afilelines[$ncount], $szsearchstring, $szreplacestring, 1 - $foccurance, $fcaseness) $iretval = $iretval + 1 If $foccurance = 0 Then $iretval = 1 ExitLoop EndIf EndIf Next For $ncount = 1 To $afilelines[0] - 1 If FileWriteLine($hwritehandle, $afilelines[$ncount]) = 0 Then FileClose($hwritehandle) Return SetError(3, 0, -1) EndIf Next If $afilelines[$ncount] <> "" Then FileWrite($hwritehandle, $afilelines[$ncount] & $sendswith) FileClose($hwritehandle) Return $iretval EndFunc Func _tempfile($s_directoryname = @TempDir, $s_fileprefix = "~", $s_fileextension = ".tmp", $i_randomlength = 7) If IsKeyword($s_fileprefix) Then $s_fileprefix = "~" If IsKeyword($s_fileextension) Then $s_fileextension = ".tmp" If IsKeyword($i_randomlength) Then $i_randomlength = 7 If NOT FileExists($s_directoryname) Then $s_directoryname = @TempDir If NOT FileExists($s_directoryname) Then $s_directoryname = @ScriptDir If StringRight($s_directoryname, 1) <> "\" Then $s_directoryname = $s_directoryname & "\" Local $s_tempname Do $s_tempname = "" While StringLen($s_tempname) < $i_randomlength $s_tempname = $s_tempname & Chr(Random(97, 122, 1)) WEnd $s_tempname = $s_directoryname & $s_fileprefix & $s_tempname & $s_fileextension Until NOT FileExists($s_tempname) Return $s_tempname EndFunc Func _arrayadd(ByRef $avarray, $vvalue) If NOT IsArray($avarray) Then Return SetError(1, 0, -1) If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, -1) Local $iubound = UBound($avarray) ReDim $avarray[$iubound + 1] $avarray[$iubound] = $vvalue Return $iubound EndFunc Func _arraybinarysearch(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0) If NOT IsArray($avarray) Then Return SetError(1, 0, -1) If UBound($avarray, 0) <> 1 Then Return SetError(5, 0, -1) Local $iubound = UBound($avarray) - 1 If $iend < 1 OR $iend > $iubound Then $iend = $iubound If $istart < 0 Then $istart = 0 If $istart > $iend Then Return SetError(4, 0, -1) Local $imid = Int(($iend + $istart) / 2) If $avarray[$istart] > $vvalue OR $avarray[$iend] < $vvalue Then Return SetError(2, 0, -1) While $istart <= $imid AND $vvalue <> $avarray[$imid] If $vvalue < $avarray[$imid] Then $iend = $imid - 1 Else $istart = $imid + 1 EndIf $imid = Int(($iend + $istart) / 2) WEnd If $istart > $iend Then Return SetError(3, 0, -1) Return $imid EndFunc Func _arraycombinations(ByRef $avarray, $iset, $sdelim = "") If NOT IsArray($avarray) Then Return SetError(1, 0, 0) If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, 0) Local $in = UBound($avarray) Local $ir = $iset Local $aidx[$ir] For $i = 0 To $ir - 1 $aidx[$i] = $i Next Local $itotal = __array_combinations($in, $ir) Local $ileft = $itotal Local $aresult[$itotal + 1] $aresult[0] = $itotal Local $icount = 1 While $ileft > 0 __array_getnext($in, $ir, $ileft, $itotal, $aidx) For $i = 0 To $iset - 1 $aresult[$icount] &= $avarray[$aidx[$i]] & $sdelim Next If $sdelim <> "" Then $aresult[$icount] = StringTrimRight($aresult[$icount], 1) $icount += 1 WEnd Return $aresult EndFunc Func _arrayconcatenate(ByRef $avarraytarget, Const ByRef $avarraysource, $istart = 0) If NOT IsArray($avarraytarget) Then Return SetError(1, 0, 0) If NOT IsArray($avarraysource) Then Return SetError(2, 0, 0) If UBound($avarraytarget, 0) <> 1 Then If UBound($avarraysource, 0) <> 1 Then Return SetError(5, 0, 0) Return SetError(3, 0, 0) EndIf If UBound($avarraysource, 0) <> 1 Then Return SetError(4, 0, 0) Local $iuboundtarget = UBound($avarraytarget) - $istart, $iuboundsource = UBound($avarraysource) ReDim $avarraytarget[$iuboundtarget + $iuboundsource] For $i = $istart To $iuboundsource - 1 $avarraytarget[$iuboundtarget + $i] = $avarraysource[$i] Next Return $iuboundtarget + $iuboundsource EndFunc Func _arraycreate($v_0, $v_1 = 0, $v_2 = 0, $v_3 = 0, $v_4 = 0, $v_5 = 0, $v_6 = 0, $v_7 = 0, $v_8 = 0, $v_9 = 0, $v_10 = 0, $v_11 = 0, $v_12 = 0, $v_13 = 0, $v_14 = 0, $v_15 = 0, $v_16 = 0, $v_17 = 0, $v_18 = 0, $v_19 = 0, $v_20 = 0) Local $av_array[21] = [$v_0, $v_1, $v_2, $v_3, $v_4, $v_5, $v_6, $v_7, $v_8, $v_9, $v_10, $v_11, $v_12, $v_13, $v_14, $v_15, $v_16, $v_17, $v_18, $v_19, $v_20] ReDim $av_array[@NumParams] Return $av_array EndFunc Func _arraydelete(ByRef $avarray, $ielement) If NOT IsArray($avarray) Then Return SetError(1, 0, 0) Local $iubound = UBound($avarray, 1) - 1 If NOT $iubound Then $avarray = "" Return 0 EndIf If $ielement < 0 Then $ielement = 0 If $ielement > $iubound Then $ielement = $iubound Switch UBound($avarray, 0) Case 1 For $i = $ielement To $iubound - 1 $avarray[$i] = $avarray[$i + 1] Next ReDim $avarray[$iubound] Case 2 Local $isubmax = UBound($avarray, 2) - 1 For $i = $ielement To $iubound - 1 For $j = 0 To $isubmax $avarray[$i][$j] = $avarray[$i + 1][$j] Next Next ReDim $avarray[$iubound][$isubmax + 1] Case Else Return SetError(3, 0, 0) EndSwitch Return $iubound EndFunc Func _arraydisplay(Const ByRef $avarray, $stitle = "Array: ListView Display", $iitemlimit = -1, $itranspose = 0, $sseparator = "", $sreplace = "|", $sheader = "") If NOT IsArray($avarray) Then Return SetError(1, 0, 0) Local $idimension = UBound($avarray, 0), $iubound = UBound($avarray, 1) - 1, $isubmax = UBound($avarray, 2) - 1 If $idimension > 2 Then Return SetError(2, 0, 0) If $sseparator = "" Then $sseparator = Chr(124) If _arraysearch($avarray, $sseparator, 0, 0, 0, 1) <> -1 Then For $x = 1 To 255 If $x >= 32 AND $x <= 127 Then ContinueLoop Local $sfind = _arraysearch($avarray, Chr($x), 0, 0, 0, 1) If $sfind = -1 Then $sseparator = Chr($x) ExitLoop EndIf Next EndIf Local $vtmp, $ibuffer = 4094 Local $icollimit = 250 Local $ioneventmode = Opt("GUIOnEventMode", 0), $sdataseparatorchar = Opt("GUIDataSeparatorChar", $sseparator) If $isubmax < 0 Then $isubmax = 0 If $itranspose Then $vtmp = $iubound $iubound = $isubmax $isubmax = $vtmp EndIf If $isubmax > $icollimit Then $isubmax = $icollimit If $iitemlimit < 1 Then $iitemlimit = $iubound If $iubound > $iitemlimit Then $iubound = $iitemlimit If $sheader = "" Then $sheader = "Row " For $i = 0 To $isubmax $sheader &= $sseparator & "Col " & $i Next EndIf Local $avarraytext[$iubound + 1] For $i = 0 To $iubound $avarraytext[$i] = "[" & $i & "]" For $j = 0 To $isubmax If $idimension = 1 Then If $itranspose Then $vtmp = $avarray[$j] Else $vtmp = $avarray[$i] EndIf Else If $itranspose Then $vtmp = $avarray[$j][$i] Else $vtmp = $avarray[$i][$j] EndIf EndIf $vtmp = StringReplace($vtmp, $sseparator, $sreplace, 0, 1) If StringLen($vtmp) > $ibuffer Then $vtmp = StringLeft($vtmp, $ibuffer) $avarraytext[$i] &= $sseparator & $vtmp Next Next Local Const $_arrayconstant_gui_dockborders = 102 Local Const $_arrayconstant_gui_dockbottom = 64 Local Const $_arrayconstant_gui_dockheight = 512 Local Const $_arrayconstant_gui_dockleft = 2 Local Const $_arrayconstant_gui_dockright = 4 Local Const $_arrayconstant_gui_event_close = -3 Local Const $_arrayconstant_lvm_getcolumnwidth = (4096 + 29) Local Const $_arrayconstant_lvm_getitemcount = (4096 + 4) Local Const $_arrayconstant_lvm_getitemstate = (4096 + 44) Local Const $_arrayconstant_lvm_setextendedlistviewstyle = (4096 + 54) Local Const $_arrayconstant_lvs_ex_fullrowselect = 32 Local Const $_arrayconstant_lvs_ex_gridlines = 1 Local Const $_arrayconstant_lvs_showselalways = 8 Local Const $_arrayconstant_ws_ex_clientedge = 512 Local Const $_arrayconstant_ws_maximizebox = 65536 Local Const $_arrayconstant_ws_minimizebox = 131072 Local Const $_arrayconstant_ws_sizebox = 262144 Local $iwidth = 640, $iheight = 480 Local $hgui = GUICreate($stitle, $iwidth, $iheight, Default, Default, BitOR($_arrayconstant_ws_sizebox, $_arrayconstant_ws_minimizebox, $_arrayconstant_ws_maximizebox)) Local $aiguisize = WinGetClientSize($hgui) Local $hlistview = GUICtrlCreateListView($sheader, 0, 0, $aiguisize[0], $aiguisize[1] - 26, $_arrayconstant_lvs_showselalways) Local $hcopy = GUICtrlCreateButton("Copy Selected", 3, $aiguisize[1] - 23, $aiguisize[0] - 6, 20) GUICtrlSetResizing($hlistview, $_arrayconstant_gui_dockborders) GUICtrlSetResizing($hcopy, $_arrayconstant_gui_dockleft + $_arrayconstant_gui_dockright + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight) GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_lvs_ex_gridlines, $_arrayconstant_lvs_ex_gridlines) GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_lvs_ex_fullrowselect, $_arrayconstant_lvs_ex_fullrowselect) GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_ws_ex_clientedge, $_arrayconstant_ws_ex_clientedge) For $i = 0 To $iubound GUICtrlCreateListViewItem($avarraytext[$i], $hlistview) Next $iwidth = 0 For $i = 0 To $isubmax + 1 $iwidth += GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_getcolumnwidth, $i, 0) Next If $iwidth < 250 Then $iwidth = 230 $iwidth += 20 If $iwidth > @DesktopWidth Then $iwidth = @DesktopWidth - 100 WinMove($hgui, "", (@DesktopWidth - $iwidth) / 2, Default, $iwidth) GUISetState(@SW_SHOW, $hgui) While 1 Switch GUIGetMsg() Case $_arrayconstant_gui_event_close ExitLoop Case $hcopy Local $sclip = "" Local $aicuritems[1] = [0] For $i = 0 To GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_getitemcount, 0, 0) If GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_getitemstate, $i, 2) Then $aicuritems[0] += 1 ReDim $aicuritems[$aicuritems[0] + 1] $aicuritems[$aicuritems[0]] = $i EndIf Next If NOT $aicuritems[0] Then For $sitem In $avarraytext $sclip &= $sitem & @CRLF Next Else For $i = 1 To UBound($aicuritems) - 1 $sclip &= $avarraytext[$aicuritems[$i]] & @CRLF Next EndIf ClipPut($sclip) EndSwitch WEnd GUIDelete($hgui) Opt("GUIOnEventMode", $ioneventmode) Opt("GUIDataSeparatorChar", $sdataseparatorchar) Return 1 EndFunc Func _arrayfindall(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0, $icase = 0, $icompare = 0, $isubitem = 0) $istart = _arraysearch($avarray, $vvalue, $istart, $iend, $icase, $icompare, 1, $isubitem) If @error Then Return SetError(@error, 0, -1) Local $iindex = 0, $avresult[UBound($avarray)] Do $avresult[$iindex] = $istart $iindex += 1 $istart = _arraysearch($avarray, $vvalue, $istart + 1, $iend, $icase, $icompare, 1, $isubitem) Until @error ReDim $avresult[$iindex] Return $avresult EndFunc Func _arrayinsert(ByRef $avarray, $ielement, $vvalue = "") If NOT IsArray($avarray) Then Return SetError(1, 0, 0) If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, 0) Local $iubound = UBound($avarray) + 1 ReDim $avarray[$iubound] For $i = $iubound - 1 To $ielement + 1 Step -1 $avarray[$i] = $avarray[$i - 1] Next $avarray[$ielement] = $vvalue Return $iubound EndFunc Func _arraymax(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0) Local $iresult = _arraymaxindex($avarray, $icompnumeric, $istart, $iend) If @error Then Return SetError(@error, 0, "") Return $avarray[$iresult] EndFunc Func _arraymaxindex(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0) If NOT IsArray($avarray) OR UBound($avarray, 0) <> 1 Then Return SetError(1, 0, -1) If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, -1) Local $iubound = UBound($avarray) - 1 If $iend < 1 OR $iend > $iubound Then $iend = $iubound If $istart < 0 Then $istart = 0 If $istart > $iend Then Return SetError(2, 0, -1) Local $imaxindex = $istart If $icompnumeric Then For $i = $istart To $iend If Number($avarray[$imaxindex]) < Number($avarray[$i]) Then $imaxindex = $i Next Else For $i = $istart To $iend If $avarray[$imaxindex] < $avarray[$i] Then $imaxindex = $i Next EndIf Return $imaxindex EndFunc Func _arraymin(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0) Local $iresult = _arrayminindex($avarray, $icompnumeric, $istart, $iend) If @error Then Return SetError(@error, 0, "") Return $avarray[$iresult] EndFunc Func _arrayminindex(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0) If NOT IsArray($avarray) Then Return SetError(1, 0, -1) If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, -1) Local $iubound = UBound($avarray) - 1 If $iend < 1 OR $iend > $iubound Then $iend = $iubound If $istart < 0 Then $istart = 0 If $istart > $iend Then Return SetError(2, 0, -1) Local $iminindex = $istart If $icompnumeric Then For $i = $istart To $iend If Number($avarray[$iminindex]) > Number($avarray[$i]) Then $iminindex = $i Next Else For $i = $istart To $iend If $avarray[$iminindex] > $avarray[$i] Then $iminindex = $i Next EndIf Return $iminindex EndFunc Func _arraypermute(ByRef $avarray, $sdelim = "") If NOT IsArray($avarray) Then Return SetError(1, 0, 0) If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, 0) Local $isize = UBound($avarray), $ifactorial = 1, $aidx[$isize], $aresult[1], $icount = 1 For $i = 0 To $isize - 1 $aidx[$i] = $i Next For $i = $isize To 1 Step -1 $ifactorial *= $i Next ReDim $aresult[$ifactorial + 1] $aresult[0] = $ifactorial __array_exeterinternal($avarray, 0, $isize, $sdelim, $aidx, $aresult, $icount) Return $aresult EndFunc Func _arraypop(ByRef $avarray) If (NOT IsArray($avarray)) Then Return SetError(1, 0, "") If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, "") Local $iubound = UBound($avarray) - 1, $slastval = $avarray[$iubound] If NOT $iubound Then $avarray = "" Else ReDim $avarray[$iubound] EndIf Return $slastval EndFunc Func _arraypush(ByRef $avarray, $vvalue, $idirection = 0) If (NOT IsArray($avarray)) Then Return SetError(1, 0, 0) If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, 0) Local $iubound = UBound($avarray) - 1 If IsArray($vvalue) Then Local $iubounds = UBound($vvalue) If ($iubounds - 1) > $iubound Then Return SetError(2, 0, 0) If $idirection Then For $i = $iubound To $iubounds Step -1 $avarray[$i] = $avarray[$i - $iubounds] Next For $i = 0 To $iubounds - 1 $avarray[$i] = $vvalue[$i] Next Else For $i = 0 To $iubound - $iubounds $avarray[$i] = $avarray[$i + $iubounds] Next For $i = 0 To $iubounds - 1 $avarray[$i + $iubound - $iubounds + 1] = $vvalue[$i] Next EndIf Else If $idirection Then For $i = $iubound To 1 Step -1 $avarray[$i] = $avarray[$i - 1] Next $avarray[0] = $vvalue Else For $i = 0 To $iubound - 1 $avarray[$i] = $avarray[$i + 1] Next $avarray[$iubound] = $vvalue EndIf EndIf Return 1 EndFunc Func _arrayreverse(ByRef $avarray, $istart = 0, $iend = 0) If NOT IsArray($avarray) Then Return SetError(1, 0, 0) If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, 0) Local $vtmp, $iubound = UBound($avarray) - 1 If $iend < 1 OR $iend > $iubound Then $iend = $iubound If $istart < 0 Then $istart = 0 If $istart > $iend Then Return SetError(2, 0, 0) For $i = $istart To Int(($istart + $iend - 1) / 2) $vtmp = $avarray[$i] $avarray[$i] = $avarray[$iend] $avarray[$iend] = $vtmp $iend -= 1 Next Return 1 EndFunc Func _arraysearch(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0, $icase = 0, $icompare = 0, $iforward = 1, $isubitem = -1) If NOT IsArray($avarray) Then Return SetError(1, 0, -1) If UBound($avarray, 0) > 2 OR UBound($avarray, 0) < 1 Then Return SetError(2, 0, -1) Local $iubound = UBound($avarray) - 1 If $iend < 1 OR $iend > $iubound Then $iend = $iubound If $istart < 0 Then $istart = 0 If $istart > $iend Then Return SetError(4, 0, -1) Local $istep = 1 If NOT $iforward Then Local $itmp = $istart $istart = $iend $iend = $itmp $istep = -1 EndIf Local $icomptype = False If $icompare = 2 Then $icompare = 0 $icomptype = True EndIf Switch UBound($avarray, 0) Case 1 If NOT $icompare Then If NOT $icase Then For $i = $istart To $iend Step $istep If $icomptype AND VarGetType($avarray[$i]) <> VarGetType($vvalue) Then ContinueLoop If $avarray[$i] = $vvalue Then Return $i Next Else For $i = $istart To $iend Step $istep If $icomptype AND VarGetType($avarray[$i]) <> VarGetType($vvalue) Then ContinueLoop If $avarray[$i] == $vvalue Then Return $i Next EndIf Else For $i = $istart To $iend Step $istep If StringInStr($avarray[$i], $vvalue, $icase) > 0 Then Return $i Next EndIf Case 2 Local $iuboundsub = UBound($avarray, 2) - 1 If $isubitem > $iuboundsub Then $isubitem = $iuboundsub If $isubitem < 0 Then $isubitem = 0 Else $iuboundsub = $isubitem EndIf For $j = $isubitem To $iuboundsub If NOT $icompare Then If NOT $icase Then For $i = $istart To $iend Step $istep If $icomptype AND VarGetType($avarray[$i][$j]) <> VarGetType($vvalue) Then ContinueLoop If $avarray[$i][$j] = $vvalue Then Return $i Next Else For $i = $istart To $iend Step $istep If $icomptype AND VarGetType($avarray[$i][$j]) <> VarGetType($vvalue) Then ContinueLoop If $avarray[$i][$j] == $vvalue Then Return $i Next EndIf Else For $i = $istart To $iend Step $istep If StringInStr($avarray[$i][$j], $vvalue, $icase) > 0 Then Return $i Next EndIf Next Case Else Return SetError(7, 0, -1) EndSwitch Return SetError(6, 0, -1) EndFunc Func _arraysort(ByRef $avarray, $idescending = 0, $istart = 0, $iend = 0, $isubitem = 0) If NOT IsArray($avarray) Then Return SetError(1, 0, 0) Local $iubound = UBound($avarray) - 1 If $iend < 1 OR $iend > $iubound Then $iend = $iubound If $istart < 0 Then $istart = 0 If $istart > $iend Then Return SetError(2, 0, 0) Switch UBound($avarray, 0) Case 1 __arrayquicksort1d($avarray, $istart, $iend) If $idescending Then _arrayreverse($avarray, $istart, $iend) Case 2 Local $isubmax = UBound($avarray, 2) - 1 If $isubitem > $isubmax Then Return SetError(3, 0, 0) If $idescending Then $idescending = -1 Else $idescending = 1 EndIf __arrayquicksort2d($avarray, $idescending, $istart, $iend, $isubitem, $isubmax) Case Else Return SetError(4, 0, 0) EndSwitch Return 1 EndFunc Func __arrayquicksort1d(ByRef $avarray, ByRef $istart, ByRef $iend) If $iend <= $istart Then Return Local $vtmp If ($iend - $istart) < 15 Then Local $vcur For $i = $istart + 1 To $iend $vtmp = $avarray[$i] If IsNumber($vtmp) Then For $j = $i - 1 To $istart Step -1 $vcur = $avarray[$j] If ($vtmp >= $vcur AND IsNumber($vcur)) OR (NOT IsNumber($vcur) AND StringCompare($vtmp, $vcur) >= 0) Then ExitLoop $avarray[$j + 1] = $vcur Next Else For $j = $i - 1 To $istart Step -1 If (StringCompare($vtmp, $avarray[$j]) >= 0) Then ExitLoop $avarray[$j + 1] = $avarray[$j] Next EndIf $avarray[$j + 1] = $vtmp Next Return EndIf Local $l = $istart, $r = $iend, $vpivot = $avarray[Int(($istart + $iend) / 2)], $fnum = IsNumber($vpivot) Do If $fnum Then While ($avarray[$l] < $vpivot AND IsNumber($avarray[$l])) OR (NOT IsNumber($avarray[$l]) AND StringCompare($avarray[$l], $vpivot) < 0) $l += 1 WEnd While ($avarray[$r] > $vpivot AND IsNumber($avarray[$r])) OR (NOT IsNumber($avarray[$r]) AND StringCompare($avarray[$r], $vpivot) > 0) $r -= 1 WEnd Else While (StringCompare($avarray[$l], $vpivot) < 0) $l += 1 WEnd While (StringCompare($avarray[$r], $vpivot) > 0) $r -= 1 WEnd EndIf If $l <= $r Then $vtmp = $avarray[$l] $avarray[$l] = $avarray[$r] $avarray[$r] = $vtmp $l += 1 $r -= 1 EndIf Until $l > $r __arrayquicksort1d($avarray, $istart, $r) __arrayquicksort1d($avarray, $l, $iend) EndFunc Func __arrayquicksort2d(ByRef $avarray, ByRef $istep, ByRef $istart, ByRef $iend, ByRef $isubitem, ByRef $isubmax) If $iend <= $istart Then Return Local $vtmp, $l = $istart, $r = $iend, $vpivot = $avarray[Int(($istart + $iend) / 2)][$isubitem], $fnum = IsNumber($vpivot) Do If $fnum Then While ($istep * ($avarray[$l][$isubitem] - $vpivot) < 0 AND IsNumber($avarray[$l][$isubitem])) OR (NOT IsNumber($avarray[$l][$isubitem]) AND $istep * StringCompare($avarray[$l][$isubitem], $vpivot) < 0) $l += 1 WEnd While ($istep * ($avarray[$r][$isubitem] - $vpivot) > 0 AND IsNumber($avarray[$r][$isubitem])) OR (NOT IsNumber($avarray[$r][$isubitem]) AND $istep * StringCompare($avarray[$r][$isubitem], $vpivot) > 0) $r -= 1 WEnd Else While ($istep * StringCompare($avarray[$l][$isubitem], $vpivot) < 0) $l += 1 WEnd While ($istep * StringCompare($avarray[$r][$isubitem], $vpivot) > 0) $r -= 1 WEnd EndIf If $l <= $r Then For $i = 0 To $isubmax $vtmp = $avarray[$l][$i] $avarray[$l][$i] = $avarray[$r][$i] $avarray[$r][$i] = $vtmp Next $l += 1 $r -= 1 EndIf Until $l > $r __arrayquicksort2d($avarray, $istep, $istart, $r, $isubitem, $isubmax) __arrayquicksort2d($avarray, $istep, $l, $iend, $isubitem, $isubmax) EndFunc Func _arrayswap(ByRef $vitem1, ByRef $vitem2) Local $vtmp = $vitem1 $vitem1 = $vitem2 $vitem2 = $vtmp EndFunc Func _arraytoclip(Const ByRef $avarray, $istart = 0, $iend = 0) Local $sresult = _arraytostring($avarray, @CR, $istart, $iend) If @error Then Return SetError(@error, 0, 0) Return ClipPut($sresult) EndFunc Func _arraytostring(Const ByRef $avarray, $sdelim = "|", $istart = 0, $iend = 0) If NOT IsArray($avarray) Then Return SetError(1, 0, "") If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, "") Local $sresult, $iubound = UBound($avarray) - 1 If $iend < 1 OR $iend > $iubound Then $iend = $iubound If $istart < 0 Then $istart = 0 If $istart > $iend Then Return SetError(2, 0, "") For $i = $istart To $iend $sresult &= $avarray[$i] & $sdelim Next Return StringTrimRight($sresult, StringLen($sdelim)) EndFunc Func _arraytrim(ByRef $avarray, $itrimnum, $idirection = 0, $istart = 0, $iend = 0) If NOT IsArray($avarray) Then Return SetError(1, 0, 0) If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, 0) Local $iubound = UBound($avarray) - 1 If $iend < 1 OR $iend > $iubound Then $iend = $iubound If $istart < 0 Then $istart = 0 If $istart > $iend Then Return SetError(5, 0, 0) If $idirection Then For $i = $istart To $iend $avarray[$i] = StringTrimRight($avarray[$i], $itrimnum) Next Else For $i = $istart To $iend $avarray[$i] = StringTrimLeft($avarray[$i], $itrimnum) Next EndIf Return 1 EndFunc Func _arrayunique($aarray, $idimension = 1, $ibase = 0, $icase = 0, $vdelim = "|") Local $iubounddim If $vdelim = "|" Then $vdelim = Chr(1) If NOT IsArray($aarray) Then Return SetError(1, 0, 0) If NOT $idimension > 0 Then Return SetError(3, 0, 0) Else $iubounddim = UBound($aarray, 1) If @error Then Return SetError(3, 0, 0) If $idimension > 1 Then Local $aarraytmp[1] For $i = 0 To $iubounddim - 1 _arrayadd($aarraytmp, $aarray[$i][$idimension - 1]) Next _arraydelete($aarraytmp, 0) Else If UBound($aarray, 0) = 1 Then Dim $aarraytmp[1] For $i = 0 To $iubounddim - 1 _arrayadd($aarraytmp, $aarray[$i]) Next _arraydelete($aarraytmp, 0) Else Dim $aarraytmp[1] For $i = 0 To $iubounddim - 1 _arrayadd($aarraytmp, $aarray[$i][$idimension - 1]) Next _arraydelete($aarraytmp, 0) EndIf EndIf EndIf Local $shold For $icc = $ibase To UBound($aarraytmp) - 1 If NOT StringInStr($vdelim & $shold, $vdelim & $aarraytmp[$icc] & $vdelim, $icase) Then $shold &= $aarraytmp[$icc] & $vdelim Next If $shold Then $aarraytmp = StringSplit(StringTrimRight($shold, StringLen($vdelim)), $vdelim, 1) Return $aarraytmp EndIf Return SetError(2, 0, 0) EndFunc Func __array_exeterinternal(ByRef $avarray, $istart, $isize, $sdelim, ByRef $aidx, ByRef $aresult, ByRef $icount) If $istart == $isize - 1 Then For $i = 0 To $isize - 1 $aresult[$icount] &= $avarray[$aidx[$i]] & $sdelim Next If $sdelim <> "" Then $aresult[$icount] = StringTrimRight($aresult[$icount], 1) $icount += 1 Else Local $itemp For $i = $istart To $isize - 1 $itemp = $aidx[$i] $aidx[$i] = $aidx[$istart] $aidx[$istart] = $itemp __array_exeterinternal($avarray, $istart + 1, $isize, $sdelim, $aidx, $aresult, $icount) $aidx[$istart] = $aidx[$i] $aidx[$i] = $itemp Next EndIf EndFunc Func __array_combinations($in, $ir) Local $i_total = 1 For $i = $ir To 1 Step -1 $i_total *= ($in / $i) $in -= 1 Next Return Round($i_total) EndFunc Func __array_getnext($in, $ir, ByRef $ileft, $itotal, ByRef $aidx) If $ileft == $itotal Then $ileft -= 1 Return EndIf Local $i = $ir - 1 While $aidx[$i] == $in - $ir + $i $i -= 1 WEnd $aidx[$i] += 1 For $j = $i + 1 To $ir - 1 $aidx[$j] = $aidx[$i] + $j - $i Next $ileft -= 1 EndFunc Global Const $process_terminate = 1 Global Const $process_create_thread = 2 Global Const $process_set_sessionid = 4 Global Const $process_vm_operation = 8 Global Const $process_vm_read = 16 Global Const $process_vm_write = 32 Global Const $process_dup_handle = 64 Global Const $process_create_process = 128 Global Const $process_set_quota = 256 Global Const $process_set_information = 512 Global Const $process_query_information = 1024 Global Const $process_suspend_resume = 2048 Global Const $process_all_access = 2035711 Func _processgetname($i_pid) If NOT ProcessExists($i_pid) Then Return SetError(1, 0, "") If NOT @error Then Local $a_processes = ProcessList() For $i = 1 To $a_processes[0][0] If $a_processes[$i][1] = $i_pid Then Return $a_processes[$i][0] Next EndIf Return SetError(1, 0, "") EndFunc Func _processgetpriority($vprocess) Local $ierror, $iextended, $ireturn = -1 Local $i_pid = ProcessExists($vprocess) If NOT $i_pid Then Return SetError(1, 0, -1) Local $hdll = DllOpen("kernel32.dll") Do Local $aprocesshandle = DllCall($hdll, "handle", "OpenProcess", "dword", $process_query_information, "bool", False, "dword", $i_pid) If @error Then $ierror = @error $iextended = @extended ExitLoop EndIf If NOT $aprocesshandle[0] Then ExitLoop Local $apriority = DllCall($hdll, "dword", "GetPriorityClass", "handle", $aprocesshandle[0]) If @error Then $ierror = @error $iextended = @extended EndIf DllCall($hdll, "bool", "CloseHandle", "handle", $aprocesshandle[0]) If $ierror Then ExitLoop Switch $apriority[0] Case 64 $ireturn = 0 Case 16384 $ireturn = 1 Case 32 $ireturn = 2 Case 32768 $ireturn = 3 Case 128 $ireturn = 4 Case 256 $ireturn = 5 Case Else $ierror = 1 $iextended = $apriority[0] $ireturn = -1 EndSwitch Until True DllClose($hdll) Return SetError($ierror, $iextended, $ireturn) EndFunc Func _rundos($scommand) Local $nresult = RunWait(@ComSpec & " /C " & $scommand, "", @SW_HIDE) Return SetError(@error, @extended, $nresult) EndFunc Global $users[1] $drive = InputBox("Select Drive Letter", "Enter Drive Letter Of Customers Hard Drive") $folder = $drive & ":\Users" If FileExists($folder) Then $folderpath = $drive & ":\Users" Else $folderpath = $drive & ":\Documents and Settings" MsgBox(0, "test", $folderpath) EndIf $folders = _filelisttoarray($folderpath) $num = UBound($folders) For $i = 1 To $num - 1 IniWrite("Settings\boxes.ini", "boxes", $i, $folders[$i]) Next $sini = "Settings\boxes.ini" $hgui = GUICreate("Select User Folders", 175, 400) $adata = IniReadSection($sini, "boxes") $icount = $adata[0][0] Global $acheck[$icount + 1] For $i = 1 To $icount $acheck[$i] = GUICtrlCreateCheckbox($adata[$i][1], 10, $i * 20, 300, 20) Next $sub = GUICtrlCreateButton("Submit", 10, 350, 155, 40, 1, 256) GUISetState() Do $msg = GUIGetMsg() If $msg = $sub Then For $i = 1 To $icount If GUICtrlRead($acheck[$i]) = $gui_checked Then $temp = $adata[$i][1] IniWrite("Settings\users.ini", "users", $i, $adata[$i][1]) EndIf Next EndIf Until $msg = $sub $uini = "Settings\users.ini" GUISetState(@SW_HIDE) $udata = IniReadSection($uini, "users") $bcount = $udata[0][0] If FileExists($drive & "\Users") Then For $i = 1 To $bcount If FileExists($folderpath & "\" & $udata[$i][1] & "\Contacts") Then If FileExists("Z:\" & $udata[$i][1] & "\Contacts\") Then MsgBox(0, "test", "Not needed") $contacts = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Contacts", "Z:\" & $udata[$i][1] & "\Contacts\") Else irCreate("Z:\" & $udata[$i][1] & "\Contacts\") $contacts = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Contacts", "Z:\" & $udata[$i][1] & "\Contacts\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Contacts") = DirGetSize("Z:\" & $udata[$i][1] & "\Contacts\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Desktop") Then If FileExists("Z:\" & $udata[$i][1] & "\Desktop\") Then $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Desktop", "Z:\" & $udata[$i][1] & "\Desktop\") Else DirCreate("Z:\" & $udata[$i][1] & "\Desktop\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Desktop", "Z:\" & $udata[$i][1] & "\Desktop\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Desktop") = DirGetSize("Z:\" & $udata[$i][1] & "\Desktop\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Downloads") Then If FileExists("Z:\" & $udata[$i][1] & "\Downloads\") Then $downloads = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Downloads", "Z:\" & $udata[$i][1] & "\Downloads\") Else DirCreate("Z:\" & $udata[$i][1] & "\Downloads\") $downloads = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Downloads", "Z:\" & $udata[$i][1] & "\Downloads\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Downloads") = DirGetSize("Z:\" & $udata[$i][1] & "\Downloads\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Favorites") Then If FileExists("Z:\" & $udata[$i][1] & "\Favorites\") Then $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Favorites", "Z:\" & $udata[$i][1] & "\Favorites\") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Favorites", "Z:\" & $udata[$i][1] & "\Favorites\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Favorites") = DirGetSize("Z:\" & $udata[$i][1] & "\Favorites\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Documents") Then If FileExists("Z:\" & $udata[$i][1] & "\Documents") Then $docs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Documents", "Z:\" & $udata[$i][1] & "\Documents") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $docs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Documents", "Z:\" & $udata[$i][1] & "\Documents\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Documents") = DirGetSize("Z:\" & $udata[$i][1] & "\Documents\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Music") Then If FileExists("Z:\" & $udata[$i][1] & "\Music") Then $music = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Music", "Z:\" & $udata[$i][1] & "\Music") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $music = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Music", "Z:\" & $udata[$i][1] & "\Music\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Music") = DirGetSize("Z:\" & $udata[$i][1] & "\Music\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Pictures") Then If FileExists("Z:\" & $udata[$i][1] & "\Pictures") Then $pics = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Pictures", "Z:\" & $udata[$i][1] & "\Pictures") Else DirCreate("Z:\" & $udata[$i][1] & "\Pictures\") $pics = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Pictures", "Z:\" & $udata[$i][1] & "\Pictures\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Pictures") = DirGetSize("Z:\" & $udata[$i][1] & "\Pictures\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Videos") Then If FileExists("Z:\" & $udata[$i][1] & "\Videos") Then $vids = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Videos", "Z:\" & $udata[$i][1] & "\Videos") Else DirCreate("Z:\" & $udata[$i][1] & "\Videos\") $vids = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Videos", "Z:\" & $udata[$i][1] & "\Videos\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Videos") = DirGetSize("Z:\" & $udata[$i][1] & "\Videos\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\AppData\Local\Microsoft\Outlook" Then If FileExists("Z:\" & $udata[$i][1] & "\Outlook" Then $out = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\AppData\Local\Microsoft\Outlook", "Z:\" & $udata[$i][1] & "\Outlook") Else DirCreate("Z:\" & $udata[$i][1] & "\Outlook\") $out = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\AppData\Local\Microsoft\Outlook", "Z:\" & $udata[$i][1] & "\Outlook") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\AppData\Local\Microsoft\Outlook") = DirGetSize("Z:\" & $udata[$i][1] & "\Outlook\") Else Return 0 EndIf Run(@ComSpec & " /c " & "del /s Z:\" & $udata[$i][1] & "\desktop.ini") Next Else For $i = 1 To $bcount If FileExists($folderpath & "\" & $udata[$i][1] & "\Desktop") Then If FileExists("Z:\" & $udata[$i][1] & "\Desktop\") Then $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Desktop", "Z:\" & $udata[$i][1] & "\Desktop\") Else DirCreate("Z:\" & $udata[$i][1] & "\Desktop\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Desktop", "Z:\" & $udata[$i][1] & "\Desktop\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Desktop") = DirGetSize("Z:\" & $udata[$i][1] & "\Desktop\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Favorites") Then If FileExists("Z:\" & $udata[$i][1] & "\Favorites\") Then $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Favorites", "Z:\" & $udata[$i][1] & "\Favorites\") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Favorites", "Z:\" & $udata[$i][1] & "\Favorites\") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Favorites") = DirGetSize("Z:\" & $udata[$i][1] & "\Favorites\") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "'s Documents") Then If FileExists("Z:\" & $udata[$i][1] & "'s Documents") Then $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "'s Documents", "Z:\" & $udata[$i][1] & "'s Documents") Else DirCreate("Z:\" & $udata[$i][1] & "\Favorites\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "'s Documents", "Z:\" & $udata[$i][1] & "'s Documents") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "'s Documents") = DirGetSize("Z:\" & $udata[$i][1] & "'s Documents") Else Return 0 EndIf If FileExists($folderpath & "\" & $udata[$i][1] & "\Application Data\Microsoft\Outlook" Then If FileExists("Z:\" & $udata[$i][1] & "Outlook" Then $out = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Application Data\Microsoft\Outlook", "Z:\" & $udata[$i][1] & "\Outlook") Else DirCreate("Z:\" & $udata[$i][1] & "\Outlook\") $out = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "\Application Data\Microsoft\Outlook", "Z:\" & $udata[$i][1] & "\Outlook") EndIf Do Sleep(1000) Until DirGetSize($folderpath & "\" & $udata[$i][1] & "\Application Data\Microsoft\Outlook\") = DirGetSize("Z:\" & $udata[$i][1] & "\Outlook\") Else Return 0 EndIf RunWait(@ComSpec & " /c " & "del /s Z:\" & $udata[$i][1] & "\desktop.ini", "", @SW_HIDE) Next EndIf FileDelete(@ScriptDir & "\Settings\boxes.ini") FileDelete(@ScriptDir & "\Settings\users.ini") Func _copydirwithprogress($soriginaldir, $sdestdir) If StringRight($soriginaldir, 1) <> "\" Then $soriginaldir = $soriginaldir & "\" If StringRight($sdestdir, 1) <> "\" Then $sdestdir = $sdestdir & "\" If $soriginaldir = $sdestdir Then Return - 1 ProgressOn("Copying...", "Making list of files..." & @LF & @LF, "", -1, -1, 18) Local $afilelist = _filesearch($soriginaldir) If $afilelist[0] = 0 Then ProgressOff() SetError(1) Return - 1 EndIf If FileExists($sdestdir) Then If NOT StringInStr(FileGetAttrib($sdestdir), "d") Then ProgressOff() SetError(2) Return - 1 EndIf Else DirCreate($sdestdir) If NOT FileExists($sdestdir) Then ProgressOff() SetError(2) Return - 1 EndIf EndIf Local $idirsize, $icopiedsize = 0, $fprogress = 0 Local $c, $filename, $ioutput = 0, $slost = "", $serror Local $sl = StringLen($soriginaldir) _quick_sort($afilelist, 1, $afilelist[0]) $idirsize = Int(DirGetSize($soriginaldir) / 1024) ProgressSet(Int($fprogress * 100), $afilelist[$c], "Coping file:") For $c = 1 To $afilelist[0] $filename = StringTrimLeft($afilelist[$c], $sl) ProgressSet(Int($fprogress * 100), $afilelist[$c] & " -> " & $sdestdir & $filename & @LF & "Total KiB: " & $idirsize & @LF & "Done KiB: " & $icopiedsize, "Coping file: " & Round($fprogress * 100, 2) & " % " & $c & "/" & $afilelist[0]) If StringInStr(FileGetAttrib($afilelist[$c]), "d") Then DirCreate($sdestdir & $filename) Else If NOT FileCopy($afilelist[$c], $sdestdir & $filename, 1) Then If NOT FileCopy($afilelist[$c], $sdestdir & $filename, 1) Then If RunWait(@ComSpec & ' /c copy /y "' & $afilelist[$c] & '" "' & $sdestdir & $filename & '">' & @TempDir & "\o.tmp", "", @SW_HIDE) = 1 Then $serror = FileReadLine(@TempDir & "\o.tmp", 1) $ioutput = $ioutput + 1 $slost = $slost & $afilelist[$c] & " " & $serror & @CRLF EndIf FileDelete(@TempDir & "\o.tmp") EndIf EndIf FileSetAttrib($sdestdir & $filename, "+A-RSH") $icopiedsize = $icopiedsize + Int(FileGetSize($afilelist[$c]) / 1024) $fprogress = $icopiedsize / $idirsize EndIf Next ProgressOff() If $slost <> "" Then If FileWrite($sdestdir & "notcopied.txt", $slost) = 0 Then If FileWrite($soriginaldir & "notcopied.txt", $slost) = 0 Then FileWrite(@WorkingDir & "\notcopied.txt", $slost) EndIf EndIf EndIf Return $ioutput EndFunc Func _filesearch($sistr, $bsf = 1) Local $scriteria, $sbuffer, $ih, $ih2, $scs, $scf, $scf2, $scp, $sfp, $soutput = "", $anull[1] $scp = StringLeft($sistr, StringInStr($sistr, "\", 0, -1)) If $scp = "" Then $scp = @WorkingDir & "\" $scriteria = StringTrimLeft($sistr, StringInStr($sistr, "\", 0, -1)) If $scriteria = "" Then $scriteria = "*.*" $scs = FileFindFirstFile($scp & $scriteria) If $scs <> -1 Then Do $scf = FileFindNextFile($scs) If @error Then FileClose($scs) ExitLoop EndIf If $scf = "." OR $scf = ".." Then ContinueLoop $soutput = $soutput & $scp & $scf & @LF Until 0 EndIf If $bsf = 1 Then $sbuffer = @CR & $scp & "*" & @LF Do $scs = StringTrimLeft(StringLeft($sbuffer, StringInStr($sbuffer, @LF, 0, 1) - 1), 1) $scp = StringLeft($scs, StringInStr($scs, "\", 0, -1)) $ih = FileFindFirstFile($scs) If $ih <> -1 Then Do $scf = FileFindNextFile($ih) If @error Then FileClose($ih) ExitLoop EndIf If $scf = "." OR $scf = ".." Then ContinueLoop If StringInStr(FileGetAttrib($scp & $scf), "d") Then $sbuffer = @CR & $scp & $scf & "\*" & @LF & $sbuffer $sfp = $scp & $scf & "\" $ih2 = FileFindFirstFile($sfp & $scriteria) If $ih2 <> -1 Then Do $scf2 = FileFindNextFile($ih2) If @error Then FileClose($ih2) ExitLoop EndIf If $scf2 = "." OR $scf2 = ".." Then ContinueLoop $soutput = $soutput & $sfp & $scf2 & @LF Until 0 EndIf EndIf Until 0 EndIf $sbuffer = StringReplace($sbuffer, @CR & $scs & @LF, "") Until $sbuffer = "" EndIf If $soutput = "" Then $anull[0] = 0 Return $anull Else Return StringSplit(StringTrimRight($soutput, 1), @LF) EndIf EndFunc Func _quick_sort(ByRef $sortarray, $first, $last) Dim $low, $high Dim $temp, $list_separator $low = $first $high = $last $list_separator = StringLen($sortarray[($first + $last) / 2]) Do While (StringLen($sortarray[$low]) < $list_separator) $low = $low + 1 WEnd While (StringLen($sortarray[$high]) > $list_separator) $high = $high - 1 WEnd If ($low <= $high) Then $temp = $sortarray[$low] $sortarray[$low] = $sortarray[$high] $sortarray[$high] = $temp $low = $low + 1 $high = $high - 1 EndIf Until $low > $high If ($first < $high) Then _quick_sort($sortarray, $first, $high) If ($low < $last) Then _quick_sort($sortarray, $low, $last) EndFunc Edited July 11, 2013 by crashnburn Link to comment Share on other sites More sharing options...
orbs Posted July 11, 2013 Share Posted July 11, 2013 EDIT 3: So now I am receiving the same error but for this line of code: $out = _copydirwithprogress($folderpath & "" & $udata[$i][1] & "AppDataLocalMicrosoftOutlook", "Z:" & $udata[$i][1] & "Outlook") Odd thing is that it does start to do the backup with the correct folder structure but errors out on the section not being used.  you are not trying to back-up files currently being used by Outlook, are you? Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration -  literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff  Link to comment Share on other sites More sharing options...
crashnburn Posted July 11, 2013 Author Share Posted July 11, 2013 (edited) No. As a matter of fact the hard drive that I am using for testing doesn't even have outlook installed. I think it has already been shown that I am still pretty new to autoit. From what I have gathered, it could definitely be wrong, Return 0 is used if the folder does not exists. Is this correct? or is there a better way of going about it? EDIT: ok so I validated my syntax and it somewhat answered my question. "ERROR 'Return' not allowed from global scope". There was more errors as well. I am going to correct them and repost with results. EDIT 2: Thank you sooo much for leading me in the correct direction. Checking syntax is now something I will do every time! I can't tell you how many ")" I was missing. It's always the small things that get over looked with a bunch of code on the screen. Still not tested but I have a good feeling. Will post result soon! EDIT 3: Syntax check came out clean. Ran the script, no more errors, but it doesn't back up the My Documents folder. I noticed that the code was incorrect so I changed it to: If FileExists($folderpath & "\" & $udata[$i][1] & "My Documents") Then If FileExists("Z:\" & $udata[$i][1] & "My Documents") Then $favs = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "My Documents", "Z:\" & $udata[$i][1] & "My Documents") Else DirCreate("Z:\" & $udata[$i][1] & "\My Documents\") $desktop = _copydirwithprogress($folderpath & "\" & $udata[$i][1] & "My Documents", "Z:\" & $udata[$i][1] & "My Documents") EndIf But it is still not backing it up  EDIT 4: Too many edits....well I feel like starring at this code for the past 7 hours has fried my brain. Soon after my post I found the error: ($folderpath & "" & $udata[$i][1] & "My Documents") I was missing the backslash. Sorry to turn this post into an EDIT fest. Edited July 11, 2013 by crashnburn Link to comment Share on other sites More sharing options...
crashnburn Posted July 11, 2013 Author Share Posted July 11, 2013 (edited) Success!! at least on the XP side haven't had the opportunity to test the Vista and up portion. Thank you 0xdefea7 and orbs for you help and input!!! As luck has it I was given the opportunity to test the other side of the code...which doesn't work I can only smile at this point. I started this post cause XP was trying to backup non XP folders now that is fixed but non XP's are trying to backup xp folders....life is always full of opportunities to learn! Edited July 11, 2013 by crashnburn 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