Problem mit FileCopy / DirCopy

  • Hey Jungs also ich bin schon ganz zu frieden mit dem tool,
    wollte jetz das _MultiFileCopy durch normale DirCopy und FileCopy
    ersetzen allerdings funktioniert das nicht so wirklich wie ich das will :(

    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Version=Beta
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstants.au3>
    #include <MultiFileCopy.au3>
    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("LAN Downloader - by Alexander Scherer", 849, 647, 218, 226)
    $Group1 = GUICtrlCreateGroup("LAN Downloader ", 16, 24, 825, 617)
    $spath = GUICtrlCreateInput("", 120, 48, 305, 21)
    $dpath = GUICtrlCreateInput("Zielordner", 550, 48, 250, 21)
    $Label2 = GUICtrlCreateLabel("Such Ordner:", 32, 48, 81, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $dig = GUICtrlCreateButton("DIG IT", 456, 48, 73, 25, 0)
    $Group2 = GUICtrlCreateGroup("Dateien / Ordner ", 24, 88, 809, 505)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $check_all = GUICtrlCreateButton("Check All", 40, 608, 75, 25, 0)
    $dlgoo = GUICtrlCreateButton("DL TIS SHiT", 152, 608, 75, 25, 0)
    $exit = GUICtrlCreateButton("eXiT", 728, 608, 75, 25, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("AutoIT LAN Downloader by Alexander Scherer", 560, 8, 266, 17)
    GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    $guichecked = 0

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit]

    Case $dig

    [/autoit][autoit][/autoit][autoit]

    ; Shows the filenames of all files in the current directory, note that "." and ".." are returned.
    $search = FileFindFirstFile( GUICtrlRead($spath) & "\*.*" )
    Dim $anzahl
    Dim $summe
    $high = 88
    $left = 40

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $summe += 1
    WEnd

    [/autoit][autoit][/autoit][autoit]

    ; Close the search handle
    FileClose($search)

    [/autoit][autoit][/autoit][autoit]

    $search = FileFindFirstFile( GUICtrlRead($spath) & "\*.*" )

    [/autoit][autoit][/autoit][autoit]

    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Dim $box[$summe+1]
    Dim $files[$summe+1]

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    If $summe <> "" Then
    For $i = 1 to $summe
    GUICtrlDelete ($box[$i])
    Next
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    For $i = 1 to $summe
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    ;MsgBox(4096, "File:", $file)
    $anzahl += 1
    if $anzahl > 20 Then
    $left += 232
    $high = 88
    $anzahl = 1
    ElseIf $anzahl > 40 Then
    $left = 496
    $high = 88
    EndIf
    If $anzahl > 60 Then
    MsgBox( 1, "ERROR", "Zu viele Dateien ( 60 Maximum )!")
    Exit
    EndIf
    $high = 88 + $anzahl * 24
    $box[$i] = GUICtrlCreateCheckbox($file, $left, $high, 200, 17)
    $files[$i] = GUICtrlRead($spath) & "\" & $file
    Next

    [/autoit][autoit][/autoit][autoit]

    ; Close the search handle
    FileClose($search)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Case $check_all
    if $guichecked = 0 Then
    For $i = 1 to $summe
    GUICtrlSetState( $box[$i], $GUI_CHECKED )
    $guichecked = 1
    Next
    Else
    For $i = 1 to $summe
    GUICtrlSetState( $box[$i], $GUI_UNCHECKED )
    $guichecked = 0
    Next
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Case $dlgoo

    [/autoit][autoit][/autoit][autoit]

    Dim $aSource[$summe+1]
    Dim $f
    $f = 0

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 to $summe
    If GUICtrlRead ( $box[$i] ) = $GUI_CHECKED Then
    $f += 1
    $aSource[0] = $f
    $aSource[$i] = $files[$i]
    MsgBox(0,"",$files[$i])
    EndIf
    Next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;===Beispiel 3 (mehrere Dateien kopieren)=======================================
    ; Alle Dateien aus dem Array werden ins Zielverzeichnis kopiert
    ; Array[0] muss die Anzahl der zu kopierenden Dateien enthalten
    $sDestinationPath = GUICtrlRead($dpath) & '\'; Zielpfad (wird ggf. erstellt)
    GUISetState(@SW_HIDE, $Form1)
    ;_MultiFileCopy($aSource, $sDestinationPath, False)
    _ArrayDisplay($aSource)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;; FILE / DIR COPY

    [/autoit][autoit][/autoit][autoit]

    Dim $isdir

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 to $summe
    $isdir = 0
    If $aSource[$i] <> "" Then
    $attrib = FileGetAttrib($aSource[$i])
    If @error Then
    MsgBox(4096,"Error", "Could not obtain file attributes.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If StringInStr($attrib, "D") Then
    MsgBox(4096,"", "File is a Directory.")
    $isdir = 1
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If $isdir = 1 Then
    DirCopy($aSource[$i],$sDestinationPath)
    TrayTip ( "Copy Dir", $aSource[$i], 10 )
    Else
    FileCopy($aSource[$i],$sDestinationPath)
    TrayTip ( "Copy File", $aSource[$i], 10 )
    EndIf

    [/autoit][autoit][/autoit][autoit]

    TrayTip ( "Finished File", $aSource[$i], 10 )

    [/autoit][autoit][/autoit][autoit]

    EndIf

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    TrayTip ( "Finished", "all Files / Dirs have been finished", 10 )

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    For $i = 1 to $summe
    GUICtrlDelete ($box[$i])
    Next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;===============================================================================

    [/autoit][autoit][/autoit][autoit]

    Case $exit
    Exit

    [/autoit][autoit][/autoit][autoit]

    EndSwitch
    WEnd

    [/autoit]

    PS: ja ich weiß der code ist schlampig aber bin noch nicht so professionell im umgang mit au3 ^^ sry

    das problem müsste irgendwo hier liegen:

    [autoit]


    ;; FILE / DIR COPY

    Dim $isdir

    For $i = 1 to $summe
    $isdir = 0
    If $aSource[$i] <> "" Then
    $attrib = FileGetAttrib($aSource[$i])
    If @error Then
    MsgBox(4096,"Error", "Could not obtain file attributes.")
    Exit
    EndIf

    If StringInStr($attrib, "D") Then
    MsgBox(4096,"", "File is a Directory.")
    $isdir = 1
    EndIf

    If $isdir = 1 Then
    DirCopy($aSource[$i],$sDestinationPath)
    TrayTip ( "Copy Dir", $aSource[$i], 10 )
    Else
    FileCopy($aSource[$i],$sDestinationPath)
    TrayTip ( "Copy File", $aSource[$i], 10 )
    EndIf

    TrayTip ( "Finished File", $aSource[$i], 10 )

    EndIf

    Next


    TrayTip ( "Finished", "all Files / Dirs have been finished", 10 )

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]

    gruß nova


    PPS: jetz hab ich ganz vergessen zu sagen was nicht funktioniert, also er sagt mir immer das alle "finished" wäre ^^ aber er tut gar nichts :( ( Copy bezogen, der rest funktioniert supa )

    Einmal editiert, zuletzt von OneNonlyNova (18. Februar 2009 um 19:09)

  • hehe jetz wo ich das endlich geschafft habe antwortet ihr ^^ naja werd die tage dann mal das fertig script posten, vllt brauchs ja wer :)

    hier schonmal das bisherige:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Version=Beta
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstants.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; ############## MULTI DIR COPY ##########

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===werden benötigt=============================================================
    #include <String.au3>
    #include <Misc.au3>
    Global $strFiles = '', $strSize = 0
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===Beispiel 1 (erstellen der Datei "!copydata.mfc" im Quellverzeichnis)========
    ;Global $sSourcePath = 'C:\Programme\AutoIt3\Examples\'

    [/autoit] [autoit][/autoit] [autoit]

    ;Global $aReturn = _MultiFileCopy($sSourcePath)

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(0, 'MFC', '"!copydata.mfc" wurde erstellt!')
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===Beispiel 2 (komplettes Verzeichnis kopieren)================================
    ; Alle Dateien und Unterverzeichnisse (rekursiv) werden kopiert
    ; Verzeichnisstruktur der Quelle wird übernommen
    ;Global $sSourcePath = 'C:\Programme\AutoIt3\Examples\'
    ;Global $sDestinationPath = @ScriptDir & '\Tmp1'; Zielpfad (wird ggf. erstellt)

    [/autoit] [autoit][/autoit] [autoit]

    ;Global $aReturn = _MultiFileCopy($sSourcePath, $sDestinationPath, False)
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===Beispiel 3 (mehrere Dateien kopieren)=======================================
    ; Alle Dateien aus dem Array werden ins Zielverzeichnis kopiert
    ; Array[0] muss die Anzahl der zu kopierenden Dateien enthalten
    ;Global $aSource[4] = [3, @SystemDir & '\shell32.dll', @SystemDir & '\mspaint.exe', @SystemDir & '\eula.txt']
    ;Global $sDestinationPath = @ScriptDir & '\Tmp2'; Zielpfad (wird ggf. erstellt)

    [/autoit] [autoit][/autoit] [autoit]

    ;Global $aReturn = _MultiFileCopy($aSource, $sDestinationPath, False)
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _MultiFileCopy
    ; Description:: Kopiert mehrere Dateien mit Progressbar
    ; Parameter(s): Array mit Dateien zum kopieren oder Quellpfad,
    ; Zielpfad,
    ; überschreiben? [True/False],
    ; Wenn überschreiben = True, dann PreFix zum überschreiben
    ; Return Value(s): Array mit den kopierten Dateien
    ; Requirement(s): Global $strFiles = '', $strSize = 0
    ; #include<String.au3>
    ; #include<Misc.au3>
    ; Author(s): Tom99, progandy, eukalyptus and Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _MultiDirCopy($aSource, $sDestPath = '', $bOverWrite = True, $sPreFix = '!Copy')
    Local $oldGUICloseOnESC = Opt('GUICloseOnESC', 0)
    Local $ret, $sShowSource, $sShowDest, $sSourcePath = '', $sNewFolder = '', $k
    Local $aMFC[12] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, DllOpen('user32.dll')]
    If IsArray($aSource) Then
    If Not IsNumber($aSource[0]) Then Return SetError(1, 0, 0)
    For $i = 1 To $aSource[0]
    $aMFC[7] += FileGetSize($aSource[$i])
    Next
    Else
    $sSourcePath = $aSource
    If StringRight($sSourcePath, 1) <> '\' Then $sSourcePath &= '\'
    $strSize = 0
    TrayTip('Lese ein', 'Bitte warten! Verzeichnis wird eingelesen!', 10)
    If FileExists($sSourcePath & '!copydata.mfc') And $sDestPath <> '' Then
    Local $sFile = StringTrimRight(FileRead($sSourcePath & '!copydata.mfc'), 2)
    $strSize = StringLeft($sFile, StringInStr($sFile, @CRLF) - 1)
    $aSource = StringSplit(StringTrimLeft($sFile, StringInStr($sFile, @CRLF) + 1), @CRLF, 1)
    Else
    If FileExists($sSourcePath & '!copydata.mfc') Then FileDelete($sSourcePath & '!copydata.mfc')
    $aSource = _GetFilesFolder_Rekursiv($sSourcePath)
    Local $hFile = FileOpen($sSourcePath & '!copydata.mfc', 2)
    If $hFile <> -1 Then
    FileWriteLine($hFile, $strSize)
    For $i = 1 To $aSource[0]
    FileWriteLine($hFile, $aSource[$i])
    Next
    FileClose($hFile)
    EndIf
    EndIf
    $aMFC[7] = $strSize
    ToolTip('')
    If $sDestPath = '' Then Return SetError(0, 0, 1)
    EndIf

    TrayTip( "Kopiere", $sSourcePath, 10 ) ; ######## GERADE KOPIERENDE DATEI ANSAGEN!

    If StringRight($sDestPath, 1) <> '\' Then $sDestPath &= '\'
    If Not FileExists($sDestPath) Then
    If Not DirCreate($sDestPath) Then Return SetError(2, 0, 0)
    EndIf
    $sShowDest = StringRegExpReplace($sDestPath, '(.{15})(.*)(.{35})', '$1' & '[...]' & '$3')
    Local $aReturn = $aSource
    Local $callback = DllCallbackRegister('__Progress', 'int', 'uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;str')
    Local $ptr = DllCallbackGetPtr($callback)
    Local $DllKernel32 = DllOpen('kernel32.dll')
    __ProgressCreate($aMFC)
    $aMFC[9] = TimerInit()
    For $i = 1 To $aSource[0]
    $sArray = ''
    For $j = 0 To 11
    $sArray &= $aMFC[$j] & ';'
    Next
    $sFile = StringMid($aSource[$i], StringInStr($aSource[$i], '\', 0, -1) + 1)
    If $sSourcePath <> '' Then
    $sNewFolder = StringTrimLeft(StringLeft($aSource[$i], StringInStr($aSource[$i], '\', 0, -1)), StringLen($sSourcePath))
    If Not FileExists($sDestPath & $sNewFolder) Then
    If Not DirCreate($sDestPath & $sNewFolder) Then Return SetError(3, 0, 0)
    EndIf
    EndIf
    If $sFile = '' Then ContinueLoop
    $k = 0
    While $bOverWrite = False And FileExists($sDestPath & $sNewFolder & $sFile)
    $k += 1
    $sFile = $sPreFix & $k & "_" & StringMid($aSource[$i], StringInStr($aSource[$i], '\', 0, -1) + 1)
    WEnd
    $aReturn[$i] = $sDestPath & $sNewFolder & $sFile
    $sShowSource = StringRegExpReplace($aSource[$i], '(.{15})(.*)(.{35})', '$1' & '[...]' & '$3')
    GUICtrlSetData($aMFC[1], 'Kopiere Datei ' & @CRLF & '"' & $sShowSource & '"' & @CRLF & 'nach: "' & $sShowDest & '"')
    $ret = DllCall($DllKernel32, 'int', 'CopyFileExA', 'str', $aSource[$i], 'str', $aReturn[$i], 'ptr', $ptr, 'str', $sArray, 'int', 0, 'int', 0)
    ;~ ConsoleWrite('Return: ' & $ret[0] & @LF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $ret[0] = 0 Then $aMFC[10] = True
    $aMFC[8] += FileGetSize($aSource[$i])
    Next
    DllClose($DllKernel32)
    DllCallbackFree($callback)
    GUIDelete($aMFC[0])
    DllClose($aMFC[11])
    Opt('GUICloseOnESC', $oldGUICloseOnESC)
    Return $aReturn
    EndFunc ;==>_MultiFileCopy

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; ############## MULTI DIR COPY END ######

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; ############## MULTI FILE COPY ##########

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===werden benötigt=============================================================
    #include <String.au3>
    #include <Misc.au3>
    Global $strFiles = '', $strSize = 0
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===Beispiel 1 (erstellen der Datei "!copydata.mfc" im Quellverzeichnis)========
    ;Global $sSourcePath = 'C:\Programme\AutoIt3\Examples\'

    [/autoit] [autoit][/autoit] [autoit]

    ;Global $aReturn = _MultiFileCopy($sSourcePath)

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(0, 'MFC', '"!copydata.mfc" wurde erstellt!')
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===Beispiel 2 (komplettes Verzeichnis kopieren)================================
    ; Alle Dateien und Unterverzeichnisse (rekursiv) werden kopiert
    ; Verzeichnisstruktur der Quelle wird übernommen
    ;Global $sSourcePath = 'C:\Programme\AutoIt3\Examples\'
    ;Global $sDestinationPath = @ScriptDir & '\Tmp1'; Zielpfad (wird ggf. erstellt)

    [/autoit] [autoit][/autoit] [autoit]

    ;Global $aReturn = _MultiFileCopy($sSourcePath, $sDestinationPath, False)
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===Beispiel 3 (mehrere Dateien kopieren)=======================================
    ; Alle Dateien aus dem Array werden ins Zielverzeichnis kopiert
    ; Array[0] muss die Anzahl der zu kopierenden Dateien enthalten
    ;Global $aSource[4] = [3, @SystemDir & '\shell32.dll', @SystemDir & '\mspaint.exe', @SystemDir & '\eula.txt']
    ;Global $sDestinationPath = @ScriptDir & '\Tmp2'; Zielpfad (wird ggf. erstellt)

    [/autoit] [autoit][/autoit] [autoit]

    ;Global $aReturn = _MultiFileCopy($aSource, $sDestinationPath, False)
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _MultiFileCopy
    ; Description:: Kopiert mehrere Dateien mit Progressbar
    ; Parameter(s): Array mit Dateien zum kopieren oder Quellpfad,
    ; Zielpfad,
    ; überschreiben? [True/False],
    ; Wenn überschreiben = True, dann PreFix zum überschreiben
    ; Return Value(s): Array mit den kopierten Dateien
    ; Requirement(s): Global $strFiles = '', $strSize = 0
    ; #include<String.au3>
    ; #include<Misc.au3>
    ; Author(s): Tom99, progandy, eukalyptus and Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _MultiFileCopy($aSource, $sDestPath = '', $bOverWrite = True, $sPreFix = '!Copy')
    Local $oldGUICloseOnESC = Opt('GUICloseOnESC', 0)
    Local $ret, $sShowSource, $sShowDest, $sSourcePath = '', $sNewFolder = '', $k
    Local $aMFC[12] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, DllOpen('user32.dll')]
    If IsArray($aSource) Then
    If Not IsNumber($aSource[0]) Then Return SetError(1, 0, 0)
    For $i = 1 To $aSource[0]
    $aMFC[7] += FileGetSize($aSource[$i])
    Next
    Else
    $sSourcePath = $aSource
    If StringRight($sSourcePath, 1) <> '\' Then $sSourcePath &= '\'
    $strSize = 0
    TrayTip('Lese ein', 'Bitte warten! Verzeichnis wird eingelesen!', 10)
    If FileExists($sSourcePath & '!copydata.mfc') And $sDestPath <> '' Then
    Local $sFile = StringTrimRight(FileRead($sSourcePath & '!copydata.mfc'), 2)
    $strSize = StringLeft($sFile, StringInStr($sFile, @CRLF) - 1)
    $aSource = StringSplit(StringTrimLeft($sFile, StringInStr($sFile, @CRLF) + 1), @CRLF, 1)
    Else
    If FileExists($sSourcePath & '!copydata.mfc') Then FileDelete($sSourcePath & '!copydata.mfc')
    $aSource = _GetFilesFolder_Rekursiv($sSourcePath)
    Local $hFile = FileOpen($sSourcePath & '!copydata.mfc', 2)
    If $hFile <> -1 Then
    FileWriteLine($hFile, $strSize)
    For $i = 1 To $aSource[0]
    FileWriteLine($hFile, $aSource[$i])
    Next
    FileClose($hFile)
    EndIf
    EndIf
    $aMFC[7] = $strSize
    ToolTip('')
    If $sDestPath = '' Then Return SetError(0, 0, 1)
    EndIf
    If StringRight($sDestPath, 1) <> '\' Then $sDestPath &= '\'
    If Not FileExists($sDestPath) Then
    If Not DirCreate($sDestPath) Then Return SetError(2, 0, 0)
    EndIf
    $sShowDest = StringRegExpReplace($sDestPath, '(.{15})(.*)(.{35})', '$1' & '[...]' & '$3')
    Local $aReturn = $aSource
    Local $callback = DllCallbackRegister('__Progress', 'int', 'uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;str')
    Local $ptr = DllCallbackGetPtr($callback)
    Local $DllKernel32 = DllOpen('kernel32.dll')
    __ProgressCreate($aMFC)
    $aMFC[9] = TimerInit()
    For $i = 1 To $aSource[0]
    $sArray = ''
    For $j = 0 To 11
    $sArray &= $aMFC[$j] & ';'
    Next
    $sFile = StringMid($aSource[$i], StringInStr($aSource[$i], '\', 0, -1) + 1)
    If $sSourcePath <> '' Then
    $sNewFolder = StringTrimLeft(StringLeft($aSource[$i], StringInStr($aSource[$i], '\', 0, -1)), StringLen($sSourcePath))
    If Not FileExists($sDestPath & $sNewFolder) Then
    If Not DirCreate($sDestPath & $sNewFolder) Then Return SetError(3, 0, 0)
    EndIf
    EndIf
    If $sFile = '' Then ContinueLoop
    $k = 0
    While $bOverWrite = False And FileExists($sDestPath & $sNewFolder & $sFile)
    $k += 1
    $sFile = $sPreFix & $k & "_" & StringMid($aSource[$i], StringInStr($aSource[$i], '\', 0, -1) + 1)
    WEnd
    $aReturn[$i] = $sDestPath & $sNewFolder & $sFile
    $sShowSource = StringRegExpReplace($aSource[$i], '(.{15})(.*)(.{35})', '$1' & '[...]' & '$3')


    TrayTip( "Kopiere", $aSource[$i], 10 ) ; ######## GERADE KOPIERENDE DATEI ANSAGEN!

    GUICtrlSetData($aMFC[1], 'Kopiere Datei ' & @CRLF & '"' & $sShowSource & '"' & @CRLF & 'nach: "' & $sShowDest & '"')
    $ret = DllCall($DllKernel32, 'int', 'CopyFileExA', 'str', $aSource[$i], 'str', $aReturn[$i], 'ptr', $ptr, 'str', $sArray, 'int', 0, 'int', 0)
    ;~ ConsoleWrite('Return: ' & $ret[0] & @LF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $ret[0] = 0 Then $aMFC[10] = True
    $aMFC[8] += FileGetSize($aSource[$i])
    Next
    DllClose($DllKernel32)
    DllCallbackFree($callback)
    GUIDelete($aMFC[0])
    DllClose($aMFC[11])
    Opt('GUICloseOnESC', $oldGUICloseOnESC)
    Return $aReturn
    EndFunc ;==>_MultiFileCopy

    [/autoit] [autoit][/autoit] [autoit]

    Func __Progress($FileSize, $BytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    Local $aSplit = StringSplit(StringTrimRight($lpData, 1), ";")
    If $aSplit[11] = 'True' Then Return 1
    Local $pos = GUIGetCursorInfo($aSplit[1])
    If _IsPressed('1B', Int($aSplit[12])) Then Return 1
    If _IsPressed('01', Int($aSplit[12])) And ($pos[4] = Int($aSplit[7])) Then Return 1
    Local $sPercent = Round($BytesTransferred / $FileSize * 100, 0), $iTime, $iTotalTime, $iTransferRate
    Local $sPercentAll = Round(($aSplit[9] + $BytesTransferred) / $aSplit[8] * 100, 0)
    $iTime = TimerDiff($aSplit[10])
    $iTotalTime = Ceiling($iTime / 1000 / ($sPercentAll + 0.1) * 100)
    $iTransferRate = _StringAddThousandsSep(Int($aSplit[8] / $iTotalTime / 1000), '.', ',')
    GUICtrlSetData($aSplit[3], $sPercent & ' %')
    GUICtrlSetData($aSplit[5], $sPercent)
    GUICtrlSetData($aSplit[4], $sPercentAll & ' % Zeit: ' & Int($iTime / 1000) & '/' & $iTotalTime & ' s (' & $iTransferRate & ' KB/s)')
    GUICtrlSetData($aSplit[6], $sPercentAll)
    EndFunc ;==>__Progress

    [/autoit] [autoit][/autoit] [autoit]

    Func __ProgressCreate(ByRef $aMFC)
    If Not IsDeclared('WS_POPUPWINDOW') Then Local Const $WS_POPUPWINDOW = 0x80880000
    If Not IsDeclared('WS_EX_TOOLWINDOW') Then Local Const $WS_EX_TOOLWINDOW = 0x00000080
    If Not IsDeclared('WS_EX_COMPOSITED') Then Local Const $WS_EX_COMPOSITED = 0x02000000
    $aMFC[0] = GUICreate('MultiFileCopy', 480, 220, -1, -1, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_COMPOSITED))
    $aMFC[1] = GUICtrlCreateLabel('', 10, 10, 460, 65)
    GUICtrlSetFont(-1, 10, 400, 0, 'Courier New')
    GUICtrlCreateLabel('Datei:', 10, 83, 60, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[2] = GUICtrlCreateLabel('0 %', 80, 83, 390, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[4] = GUICtrlCreateProgress(10, 100, 460, 20)
    GUICtrlCreateLabel('Gesamt:', 10, 133, 60, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[3] = GUICtrlCreateLabel('0 %', 80, 133, 390, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[5] = GUICtrlCreateProgress(10, 150, 460, 20)
    $aMFC[6] = GUICtrlCreateButton('Abbrechen', 200, 185, 75, 25)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUISetState()
    EndFunc ;==>__ProgressCreate

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Anpassung: Verzeichnisgröße ermitteln für _MultiFileCopy ($strSize)
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then
    $strSize += $file.size
    $strFiles &= $file.Path & $Delim
    EndIf
    Else
    $strSize += $file.size
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; ############## MULTI FILE COPY END ######

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $inispath = IniRead ( "settings.ini", "Settings", "spath", "Zu durchsuchender Ordner" )
    $inidpath = IniRead ( "settings.ini", "Settings", "dpath", "Zielordner" )

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("LAN Downloader - by Alexander Scherer", 849, 647, 218, 226)
    $Group1 = GUICtrlCreateGroup("LAN Downloader ", 16, 24, 825, 617)
    $spath = GUICtrlCreateInput($inispath, 120, 48, 305, 21)
    $dpath = GUICtrlCreateInput($inidpath, 550, 48, 250, 21)
    $Label2 = GUICtrlCreateLabel("Such Ordner:", 32, 48, 81, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $dig = GUICtrlCreateButton("DIG IT", 456, 48, 73, 25, 0)
    $Group2 = GUICtrlCreateGroup("Dateien / Ordner ", 24, 88, 809, 505)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $check_all = GUICtrlCreateButton("Check All", 40, 608, 75, 25, 0)
    $dlgoo = GUICtrlCreateButton("DL TIS SHiT", 152, 608, 75, 25, 0)
    $clear = GUICtrlCreateButton("RELOAD", 252, 608, 75, 25, 0)
    $exit = GUICtrlCreateButton("eXiT", 728, 608, 75, 25, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("AutoIT LAN Downloader by Alexander Scherer", 560, 8, 266, 17)
    GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    $guichecked = 0

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip( "Willkommen", "viel Spaß mit meinem LAN Downloader", 10)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $dig

    ; Shows the filenames of all files in the current directory, note that "." and ".." are returned.
    $search = FileFindFirstFile( GUICtrlRead($spath) & "\*.*" )
    Dim $anzahl
    Dim $summe
    $high = 88
    $left = 40


    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $summe += 1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ; Close the search handle
    FileClose($search)

    [/autoit] [autoit][/autoit] [autoit]

    $search = FileFindFirstFile( GUICtrlRead($spath) & "\*.*" )

    [/autoit] [autoit][/autoit] [autoit]

    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Dim $box[$summe+1]
    Dim $files[$summe+1]
    Dim $ordner[1]
    Dim $k

    [/autoit] [autoit][/autoit] [autoit]

    If $summe <> "" Then
    For $i = 1 to $summe
    GUICtrlDelete ($box[$i])
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $i = 1 to $summe
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    ; MsgBox(4096, "File:", $file)
    $anzahl += 1
    if $anzahl > 20 Then
    $left += 232
    $high = 88
    $anzahl = 1
    ElseIf $anzahl > 40 Then
    $left = 496
    $high = 88
    EndIf
    If $anzahl > 60 Then
    MsgBox( 1, "ERROR", "Zu viele Dateien ( 60 Maximum )!")
    Exit
    EndIf


    $check = FileGetAttrib ( GUICtrlRead($spath) & "\" & $file )

    If StringInStr( $check, "D" ) Then
    $high = 88 + $anzahl * 24
    $box[$i] = GUICtrlCreateCheckbox($file, $left, $high, 200, 17)
    $k += 1
    $ordneradd = GUICtrlRead($spath) & "\" & $file & "\"
    _ArrayAdd( $ordner, $ordneradd )
    $ordner[0] = $k
    Else
    $high = 88 + $anzahl * 24
    $box[$i] = GUICtrlCreateCheckbox($file, $left, $high, 200, 17)
    $files[$i] = GUICtrlRead($spath) & "\" & $file
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; Close the search handle
    FileClose($search)

    [/autoit] [autoit][/autoit] [autoit]


    Case $check_all
    if $guichecked = 0 Then
    For $i = 1 to $summe
    GUICtrlSetState( $box[$i], $GUI_CHECKED )
    $guichecked = 1
    Next
    Else
    For $i = 1 to $summe
    GUICtrlSetState( $box[$i], $GUI_UNCHECKED )
    $guichecked = 0
    Next
    EndIf


    Case $clear

    IniWrite ( "settings.ini", "Settings", "spath", GUICtrlRead($spath) )
    IniWrite ( "settings.ini", "Settings", "dpath", GUICtrlRead($dpath) )

    Run( "LANDL.exe" )
    Exit


    Case $dlgoo

    Dim $aSource[$summe+1]
    Dim $f
    $f = 0

    For $i = 1 to $summe
    If GUICtrlRead ( $box[$i] ) = $GUI_CHECKED Then
    $f += 1
    $aSource[0] = $f
    $aSource[$i] = $files[$i]
    ;MsgBox(0,"",$files[$i])
    EndIf
    Next

    Dim $daten[1]
    $daten[0] = $f

    For $i = 1 to $summe
    If GUICtrlRead ( $box[$i] ) = $GUI_CHECKED Then
    _ArrayAdd($daten, $files[$i])
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]


    ;===Beispiel 3 (mehrere Dateien kopieren)=======================================
    ; Alle Dateien aus dem Array werden ins Zielverzeichnis kopiert
    ; Array[0] muss die Anzahl der zu kopierenden Dateien enthalten
    $sDestinationPath = GUICtrlRead($dpath) & '\'; Zielpfad (wird ggf. erstellt)
    GUISetState(@SW_HIDE, $Form1)

    If $ordner[0] <> "" Then
    ;MsgBox(0,"","dl ordner")
    For $i = 1 to $k
    _MultiDirCopy($ordner[$i], $sDestinationPath, False)
    Next
    EndIf

    _MultiFileCopy($daten, $sDestinationPath, False)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    TrayTip( "Erledigt", "Alle Dateien / Ordner kopiert", 10 )

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; FILE / DIR COPY

    ;~ Dim $isdir
    ;~
    ;~ For $i = 1 to $summe
    ;~ $isdir = 0
    ;~ If $aSource[$i] <> "" Then
    ;~ $attrib = FileGetAttrib($aSource[$i])
    ;~ If @error Then
    ;~ MsgBox(4096,"Error", "Could not obtain file attributes.")
    ;~ Exit
    ;~ EndIf
    ;~
    ;~ If StringInStr($attrib, "D") Then
    ;~ MsgBox(4096,"", "File is a Directory.")
    ;~ $isdir = 1
    ;~ EndIf
    ;~
    ;~ If $isdir = 1 Then
    ;~ DirCopy($aSource[$i],$sDestinationPath)
    ;~ TrayTip ( "Copy Dir", $aSource[$i], 10 )
    ;~ Else
    ;~ FileCopy($aSource[$i],$sDestinationPath)
    ;~ TrayTip ( "Copy File", $aSource[$i], 10 )
    ;~ EndIf
    ;~
    ;~ TrayTip ( "Finished File", $aSource[$i], 10 )
    ;~
    ;~ EndIf
    ;~
    ;~ Next
    ;~
    ;~
    ;~ TrayTip ( "Finished", "all Files / Dirs have been finished", 10 )
    ;~

    [/autoit] [autoit][/autoit] [autoit]

    ;; FILE / DIR COPY END

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $Form1)

    ;===============================================================================

    Case $exit

    IniWrite ( "settings.ini", "Settings", "spath", GUICtrlRead($spath) )
    IniWrite ( "settings.ini", "Settings", "dpath", GUICtrlRead($dpath) )

    Exit

    EndSwitch
    WEnd

    [/autoit]