Fehler beim Drag&Drop

  • Jetzt hab ich aber Bockmist gebaut 8|

    Hey all.

    Ich hab mir einen Desktop-Cleaner gebaut, weil ich mir regelmäßig den Desktop zumülle. ich ziehe 1 oder mehrere Dateien in ein Feld und diese werden dann in einen, aus einer Combobox zuvor gewählten, Ordner verschoben.
    Mit den Dateien klappt das alles, deshalb hab ich innerlich gejubelt weil ich was funktionierendes gebaut habe, ohne das ich jemanden dafür um Hilfe gebeten hab....

    Aber dann!!!

    Ich machte mich ans Werk und hab den Desktop aufgeräumt. Dabei waren auch Ordner mit Inhalt darunter.
    Und da ist es passiert. Aus den Ordnern sind Dateien ohne Endung geworden. Teilweise bis zu 4,5 GB groß. WTF!!!

    Jetzt brauch ich doch eure Hilfe.

    1. Wie kann ich die Ordner wiederherstellen?
    2. Werft doch bitte mal einen Blick auf mein Script und sagt mir wie ich den Fehler beheben kann.

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=O:\Software.System\___selbsterstellte___\___au3-files___\für den Serverjoiner\ProgrammIcon_1.ico
    #AutoIt3Wrapper_Res_Description=Desktop aufräumen einfach per Drag&Drop
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include "WindowsConstants.au3"
    #include "GUIConstantsEx.au3"
    #include "ButtonConstants.au3" ; Brauch ich um Buttons mit Icons zu versehen
    #include "_msgbox.au3" ; eigene Funktion um Variablen auszulesen
    #include <Array.au3>
    If WinExists("superior Desktop Cleaner") Then Exit
    AutoItWinSetTitle("superior Desktop Cleaner")

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

    Global $name = "My Desk-Cleaner", $gaDropFiles[1], $ordner[20], $Ordner_Pfad[20], $button[20], $open_selected_folder, $zielpfad, $iDropItem = -1, $combo, $dropper, $h_GUI, $h_Child

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

    $ordner[1]= "RAR-Files"
    $ordner[2]= "Text-Files"
    $ordner[3]= "Programme"
    $ordner[4]= "Wichtiges"
    $ordner[5]= "Funny Stuff"
    $ordner[6]= "Bilder"
    $ordner[7]= "Audio"
    $ordner[8]= "Scripte"
    $ordner[9]= "Sonstiges"

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

    $Ordner_Pfad[1] = @MyDocumentsDir & "\" & $name & "\" & $ordner[1]
    $Ordner_Pfad[2] = @MyDocumentsDir & "\" & $name & "\" & $ordner[2]
    $Ordner_Pfad[3] = @MyDocumentsDir & "\" & $name & "\" & $ordner[3]
    $Ordner_Pfad[4] = @MyDocumentsDir & "\" & $name & "\" & $ordner[4]
    $Ordner_Pfad[5] = @MyDocumentsDir & "\" & $name & "\" & $ordner[5]
    $Ordner_Pfad[6] = @MyDocumentsDir & "\" & $name & "\" & $ordner[6]
    $Ordner_Pfad[7] = @MyDocumentsDir & "\" & $name & "\" & $ordner[7]
    $Ordner_Pfad[8] = @MyDocumentsDir & "\" & $name & "\" & $ordner[8]
    $Ordner_Pfad[9] = @MyDocumentsDir & "\" & $name & "\" & $ordner[9]

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

    For $x = 1 To 9
    DirGetSize($Ordner_Pfad[$x])
    If @error Then DirCreate($Ordner_Pfad[$x])
    Next

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

    Func open_selected_folder($extended_Mode = 0)
    If $extended_Mode = 1 Then
    If GUICtrlRead($combo,1) = $ordner[1] Then ShellExecute($Ordner_Pfad[1])
    If GUICtrlRead($combo,1) = $ordner[2] Then ShellExecute($Ordner_Pfad[2])
    If GUICtrlRead($combo,1) = $ordner[3] Then ShellExecute($Ordner_Pfad[3])
    If GUICtrlRead($combo,1) = $ordner[4] Then ShellExecute($Ordner_Pfad[4])
    If GUICtrlRead($combo,1) = $ordner[5] Then ShellExecute($Ordner_Pfad[5])
    If GUICtrlRead($combo,1) = $ordner[6] Then ShellExecute($Ordner_Pfad[6])
    If GUICtrlRead($combo,1) = $ordner[7] Then ShellExecute($Ordner_Pfad[7])
    If GUICtrlRead($combo,1) = $ordner[8] Then ShellExecute($Ordner_Pfad[8])
    If GUICtrlRead($combo,1) = $ordner[9] Then ShellExecute($Ordner_Pfad[9])
    Else
    If GUICtrlRead($combo,1) = $ordner[1] Then $zielpfad = $Ordner_Pfad[1]
    If GUICtrlRead($combo,1) = $ordner[2] Then $zielpfad = $Ordner_Pfad[2]
    If GUICtrlRead($combo,1) = $ordner[3] Then $zielpfad = $Ordner_Pfad[3]
    If GUICtrlRead($combo,1) = $ordner[4] Then $zielpfad = $Ordner_Pfad[4]
    If GUICtrlRead($combo,1) = $ordner[5] Then $zielpfad = $Ordner_Pfad[5]
    If GUICtrlRead($combo,1) = $ordner[6] Then $zielpfad = $Ordner_Pfad[6]
    If GUICtrlRead($combo,1) = $ordner[7] Then $zielpfad = $Ordner_Pfad[7]
    If GUICtrlRead($combo,1) = $ordner[8] Then $zielpfad = $Ordner_Pfad[8]
    If GUICtrlRead($combo,1) = $ordner[9] Then $zielpfad = $Ordner_Pfad[9]
    EndIf
    EndFunc

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

    Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam) ; Diese Funktion ist leider geklaut O.o
    Local $nSize, $pFileName
    Local $nAmt = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', 0xFFFFFFFF, 'ptr', 0, 'int', 255)
    For $i = 0 To $nAmt[0] - 1
    $nSize = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', 0, 'int', 0)
    $nSize = $nSize[0] + 1
    $pFileName = DllStructCreate('wchar[' & $nSize & ']')
    DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', DllStructGetPtr($pFileName), 'int', $nSize)
    ReDim $gaDropFiles[$i + 1]
    $gaDropFiles[$i] = DllStructGetData($pFileName, 1)
    $pFileName = 0
    Next
    EndFunc

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

    Func drag_n_drop($kopiere_das_Zeug)
    open_selected_folder()
    $count = StringSplit($kopiere_das_Zeug,"|")
    For $y = 1 To $count[0]
    $name_file = StringMid($count[$y],StringInStr($count[$y], '\', 1, -1)+1)
    FileMove($count[$y], $zielpfad & "\" & $name_file)
    Next
    GUICtrlSetData($dropper,"")
    EndFunc

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

    Func GUI_1()
    Global $h_GUI = GUICreate($name, 150, 150, 0, 0, $WS_Popupwindow, BitOR($WS_EX_ACCEPTFILES, $WS_EX_OVERLAPPEDWINDOW, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
    GUISetBkColor(0x000000)
    Global $combo = GUICtrlCreateCombo("",2,2,80,20)
    Global $dropper = GUICtrlCreateInput("",5,30,140,115)
    $button[1] = GUICtrlCreateButton("",85,0,30,30,$BS_ICON)
    $button[2] = GUICtrlCreateButton("",118,1,26,26,$BS_ICON)
    GUICtrlSetImage($button[1], "imageres.dll", -177)
    GUICtrlSetImage($button[2], "imageres.dll", -217)
    GUICtrlSetState($dropper, $GUI_DROPACCEPTED)
    GUICtrlSetData ($combo, $ordner[1] &"|"& $ordner[2] &"|"& $ordner[3] &"|"& $ordner[4] &"|"& $ordner[5] &"|"& $ordner[6] &"|"& $ordner[7] &"|"& $ordner[8] &"|"& $ordner[9], $ordner[9])
    GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
    GUISetState(@SW_SHOW,$h_GUI)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_DROPPED Then drag_n_drop(GUICtrlRead($dropper))
    If $msg = $button[1] Then open_selected_folder(1)
    If $msg = $button[2] Then
    GUISetState(@SW_HIDE,$h_GUI)
    GUI_2()
    ExitLoop
    EndIf
    WEnd
    EndFunc

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

    Func GUI_2($size = 33)
    GUISetState(@SW_HIDE,$h_GUI)
    Global $h_Child = GUICreate("", $size, $size, 0, 0, $WS_Popupwindow, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
    $button[3] = GUICtrlCreateButton("",0,0,$size,$size,$BS_ICON)
    GUICtrlSetImage($button[3], "comres.dll",-5)
    GUISetState(@SW_SHOW,$h_Child)
    While 1
    $msg = GUIGetMsg()
    If $msg = $button[3] Then
    GUISetState(@SW_HIDE,$h_Child)
    GUI_1()
    ExitLoop
    EndIf
    WEnd
    EndFunc
    GUI_2()

    [/autoit]


    Ich bedanke mich jetzt schonmal im Voraus, denn ich bin mir sicher, dass ich von euch Hilfe bekomme.
    MfG, der "Rettich" :D

  • Also deinen Fehler kann ich dir sagen, du hast die Ordner mit FileMove statt mit DirMove verschoben. Sprich du musst zuerst prüfen ob es ein Ordner oder eine Datei ist und dementsprechend dann FileMove oder DirMove verwenden.

    Wie das ganze aber nun wieder in Ordner wandelst kann ich dir nicht sagen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Danke Chip,

    konnte das Problem Nr 2 mit Hilfe von FileGetAttrib() mit anschliessender If-Else-Bedingung lösen.

    Ein Wiederherstellungspunkt wird mir sicher nichts bringen, denn das waren ja keine Systemordner.
    Kennt niemand eine Lösung für mein 1. Problem?

    Zitat von mir selbst

    Aus den Ordnern sind Dateien ohne Endung geworden....
    Wie kann ich die Ordner wiederherstellen?

  • habe versucht, Dateien mit nem RecoveryTool wiederherzustellen, doch es hat nicht so funktioniert, wie ich wollte.
    Die Dateien in den Ordnern, auf die es mir ankam wurden mir, selbst bei Tiefenscan, als unrettbar angezeigt.

    Es waren nicht lebenswichtige Dateien in den ruinierten Ordnern gewesen, kann unter Umständen wieder an diese über andere Quellen rankommen.
    Also werd ich das Ganze unter Lehrgeld abbuchen.

    Das Problem, was zur Schrottung der Ordner geführt hat, konnte ich, wie bereits oben geschrieben, lösen, somit ist dieser Thread gelöst.

    mfG, Lottich