Dies ist eine Dateiablagebox für Dateicommander, mit welcher man per Dag und Drop Dateien und Ordner ablegen kann um sie hinterher in ein ausgewählten Verzeichnis kopieren kann.
[Blockierte Grafik: http://img88.imageshack.us/img88/7503/06070913090113kj.jpg]
Spoiler anzeigen
Code
#include<GUIConstants.au3>
;-----------------------------------Spezielle Constants---------------------------------
; scroll constants
Global Const $SB_LINEDOWN = 1
Global Const $SB_LINEUP = 0
Global Const $SB_PAGEDOWN = 3
Global Const $SB_PAGEUP = 2
Global Const $SB_SCROLLCARET = 4
Global Const $EM_SCROLLCARET = 0x00B7
Global Const $EM_SCROLL = 0xB5
;-----------------------------------Spezielle Constants---------------------------------Ende---------------------
GUICreate("FC-Dateiablage", 450, 260, 100, 300, $WS_CAPTION + $WS_SYSMENU + $WS_MINIMIZEBOX + $WS_THICKFRAME, $WS_EX_ACCEPTFILES)
$input_titel = GUICtrlCreateLabel('Zu kopierende Dateien und Ordner:', 20, 10, 380, 20)
$files = GUICtrlCreateEdit('', 20, 30, 410, 140)
GUICtrlSetState($files, $GUI_ACCEPTFILES)
$ziel_titel = GUICtrlCreateLabel('Zielverzeichnis:', 20, 180, 120, 20)
$ordner = GUICtrlCreateCheckbox('Nur Ordnerinhalt kopieren', 220, 180, 160, 20)
$ziel = GUICtrlCreateInput('', 20, 200, 380, 20)
GUICtrlSetState($ziel, $GUI_ACCEPTFILES)
$ziel_b = GUICtrlCreateButton('Z', 410, 200, 20, 20)
$copy = GUICtrlCreateButton('Kopieren', 100, 230, 70, 25)
$ende = GUICtrlCreateButton('Beenden', 240, 230, 70, 25)
GUICtrlSetFont($input_titel, 9, 800, 1, "Verdana")
GUICtrlSetFont($ziel_titel, 10, 800, 1, "Verdana")
GUICtrlSetFont($copy, 9, 800, 1, "Verdana")
GUICtrlSetFont($ende, 9, 800, 1, "Verdana")
;cmd
If $CmdLine[0] = 1 Then
GUICtrlSetData($files, $CmdLine[1] & ' ' & @CRLF)
EndIf
;cmd
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $ziel_b
$ziel_input = FileSelectFolder("Zielordner auswählen", '', 4)
GUICtrlSetData($ziel, $ziel_input)
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $copy
_Files()
Case $msg = $ende
Exit
;ExitLoop
EndSelect
WEnd
Exit
Func _Files()
GUICtrlSetState($ende, $GUI_DISABLE)
GUICtrlSetState($copy, $GUI_DISABLE)
FileDelete(@TempDir & '\files.txt')
FileWrite(@TempDir & '\files.txt', GUICtrlRead($files))
$lines = _FileCountLines(@TempDir & '\files.txt')
For $line = 1 To $lines Step 1
$file_line = FileReadLine(@TempDir & '\files.txt', $line)
If _IsDir($file_line) = 0 Then
FileCopy($file_line, GUICtrlRead($ziel), 1)
EndIf
If GUICtrlRead ($ordner) = 1 Then
DirCopy($file_line, GUICtrlRead($ziel), 1)
ElseIf GUICtrlRead ($ordner) = 4 Then
$ordner_copy = StringSplit($file_line, "\")
DirCopy($file_line & '\', GUICtrlRead($ziel) & '\' & $ordner_copy[$ordner_copy[0]], 1)
EndIf
;MsgBox('', '', $ordner_copy[$ordner_copy[0]])
Next
If GUICtrlRead ($ordner) = 4 Then
MsgBox(64, "Status Kopieren", "Alle Dateien und Ordner kopiert", 10)
ElseIf GUICtrlRead ($ordner) = 1 Then
MsgBox(64, "Status Kopieren", "Alle Dateien und Ordnerinhalte kopiert", 10)
EndIf
GUICtrlSetState($ende, $GUI_ENABLE)
GUICtrlSetState($copy, $GUI_ENABLE)
EndFunc
Func _IsDir( $s_DirDrive )
If FileExists( $s_DirDrive ) = 1 Then
If DirGetSize( $s_DirDrive ) = -1 Then
Return 0; no dir
Else
Return 1; is dir
EndIf
Else
Return -1; File Doesnt Exists || No File/No Dir
EndIf
EndFunc
Func _FileCountLines($sFilePath)
Local $N = FileGetSize($sFilePath) - 1
If @error Or $N = -1 Then Return 0
Return StringLen(StringAddCR(FileRead($sFilePath, $N))) - $N + 1
EndFunc ;==>_FileCountLines
Alles anzeigen
Edit:Während der Kopieraktion wird GUI deaktiviert
Nach Kopieraktion erscheint eine Messagebox
Beim einfügen Liste erscheint nicht mehr markiert, so dass beim nächsten Einfügen die Liste nicht versentlich gelöchst wird
Edit peethebee: Code-Tag richtig geschrieben