Desktopcleaner v1.0

  • Ist dieses Programm hilfreich? 9

    1. Ja! Endlich etwas mehr Ordnung im System. (0) 0%
    2. Nein! Ich brauch sowas nicht. (3) 33%
    3. Gute Idee, doch ich hab mein eigenes System dafür. (6) 67%

    Hey all,

    sicher kennt der eine oder andere das Problem, dass sich schnell der Desktop mit vieeelen Dateien "zumüllt".
    Mir geht es häufig so, weshalb ich mich dazu entschieden hab, ein kleines, aber zumindest für mich sehr nützliches, Programm geschrieben, dass ich gern mit euch teilen möchte.

    Was macht das Programm?

    Es wird im @UserProfileDir ein neuer Ordner angelegt mit dem Namen des Programms.
    Dieser neue Ordner dient als Basis, indem neue Ordner erstellt werden, ganz wie der Wunsch des Users ist.

    Will man seinen Desktop aufräumen, kann man so auch gleich eine vernünftige Ordnung in die ganze Geschichte reinbringen (zB alle .rar-Dateien in einen Ordner "RAR Files").

    Anmerkung: Das Programm KOPIERT sich automatisch in das Basisverzeichnis. Die neue Datei wird für die Verknüpfungen auf den Desktop und nach @StartupDir genutzt.

    Anwendung mit Screenshots

    Per Buttonklick kann ein neuer Ordner angelegt werden. Bei Erstausführung wird automatisch die Funktion dafür aufgerufen, denn es muss mind. 1 Ordner in der Basis existieren.
    In der Combobox kann man die vorhandenen Ordner in der Basis auswählen. Mit Klick auf den 2. Button wird der in der Combobox gewählte Ordner geöffnet.

    _____ MAINGUI _________ MINIGUI _______ Auswahl Combo
    [Blockierte Grafik: http://www.ifa-clan.de/files/Forumbilder/autoit/maingui.PNG] _____ [Blockierte Grafik: http://www.ifa-clan.de/files/Forumbilder/autoit/minigui.PNG] _____ [Blockierte Grafik: http://www.ifa-clan.de/files/Forumbilder/autoit/combo.PNG]

    Bei Klick auf den Button "Hide"Wechselt die GUI zu einer winzigen GUI , die in der linken oberen Ecke des Desktops angezeigt wird. Klickt man auf diese GUI, wird die HauptGUI wieder angezeigt.
    Dies dient dazu, dass KEIN Icon in der Taskleiste angezeigt wird.

    Der eigentliche Sinn des programms ist jedoch das weisse Feld in der Mitte, die Drag´n´Drop-Zone
    Man wählt in der Combobox einen zuvor erstellten Ordner und zieht dann eine oder mehrere Dateien und/oder Ordner ind diese Drag´n´Drop-Zone und die Dateien/Ordner werden in den gewünschten
    Ordner verschoben.

    Das Programm kann entweder per Tray-Icon beendet werden oder mit ESC wenn die HauptGUI aktiv ist.

    Fazit

    Ruckizucki ist der Desktop wieder frei, die verschobenen Ordner/Dateien sind ordentlich verstaut und jederzeit per Buttonklick aufrufbar.
    Das Programm baut KEINE Internetverbindung auf, liest KEINE Daten aus, enthält KEINE Werbung/Malware/Viren oder sonstigen Hackermist!


    Über euer Feedback würde ich mich freuen. Die fertige EXE findet ihr im Anhang.

    SourceCode DesktopCleaner v1.0
    [autoit]

    #include "WindowsConstants.au3"
    #include "GUIConstantsEx.au3"
    #include "ButtonConstants.au3"
    #Include "File.au3"

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

    $Name_der_Instanz = "Superior Desktop Cleaner"
    If WinExists($Name_der_Instanz) Then
    MsgBox(0,"Instanzcheck aktiv","Es wird bereits eine Instanz des soeben gestarteten Programms ausgeführt."&@CRLF&@CRLF&"Die erneute Ausführung zur Laufzeit ist nicht zulässig.")
    Exit
    EndIf
    AutoItWinSetTitle($Name_der_Instanz);....;==> sorgt dafür, dass KEINE Mehrfachstarts des Programms möglich sind. Ähnlich wie _singleton()

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

    Global $name = "Mausers Desk-Cleaner", $iDropItem = -1, $gaDropFiles[1], $button[5], $open_selected_folder, $zielpfad, $combo, $dropper, $h_GUI, $h_Child
    Global $basis = @UserProfileDir & "\" & $name & "\"

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

    Func check();...;==> Für Autostart mit Windows und Verknüpfung zum Desktop. Die eigentliche .EXE wird in der $basis hinterlegt und für die Verknüpfungen genutzt.
    If Not FileExists($basis & @ScriptName) Then FileCopy(@ScriptFullPath,$basis & @ScriptName)
    If Not FileExists(@StartupDir & "\" & $name & ".lnk") Then FileCreateShortcut($basis & @ScriptName,@StartupDir & "\" & $name & ".lnk")
    If Not FileExists(@DesktopDir & "\" & $name & ".lnk") Then FileCreateShortcut($basis & @ScriptName,@DesktopDir & "\" & $name & ".lnk")
    EndFunc
    check()

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

    Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam);...;==> diese Funktion hab ich leider geklaut :-/
    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][/autoit] [autoit]

    Func drag_n_drop($kopiere_das_Zeug);==> wie der Name schon sagt...
    $zielpfad = $basis & GUICtrlRead($combo);.......................................;==> ermittelt den Zielpfad
    $count = StringSplit($kopiere_das_Zeug,"|");....................................;==> ermittelt die Anzahl der zu verschiebenden Ordner/Dateien
    For $y = 1 To $count[0]
    $name_file = StringMid($count[$y],StringInStr($count[$y], '\', 1, -1)+1);...;==> ermittelt den Dateinamen
    $attribute = FileGetAttrib($count[$y]);.....................................;==> ermittelt ob Datei oder Ordner
    If $attribute == "D" Then
    DirMove($count[$y], $zielpfad & "\" & $name_file);......................;==> verschiebt Ordner zum Ziel
    Else
    FileMove($count[$y], $zielpfad & "\" & $name_file);.....................;==> verschiebt Dateien zum Ziel
    EndIf
    Next
    GUICtrlSetData($dropper,"");....................................................;==> setzt die Drag´n´Drop-Area zurück
    EndFunc

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

    Func aktualisierung();==> aktualisiert den Inhalt der Combobox (Ordnerliste)
    Local $inhalt = _FileListToArray($basis, "*", 2), $inhalt_combo
    If Not @error Then
    For $i = 1 To $inhalt[0]
    $inhalt_combo &= $inhalt[$i] & "|"
    Next
    Return $inhalt_combo
    Else
    new_folder()
    $inhalt = _FileListToArray($basis, "*", 2)
    For $i = 1 To $inhalt[0]
    $inhalt_combo &= $inhalt[$i] & "|"
    Next
    Return $inhalt_combo
    EndIf
    EndFunc

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

    Func new_folder();...;==> erstellt einen neuen Ordner
    Local $new_folder = InputBox("","Neuen Ordner erstellen?"&@CRLF&@CRLF&"Wenn ein neuer Ordner erstellt werden soll,"&@CRLF&"dann gib im Eingabefeld einen Namen ein.",">> hier <<")
    If Not FileExists($basis & $new_folder) Then DirCreate($basis & $new_folder)
    EndFunc

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

    Func GUI_1();........;==> HauptGUI, kann mit ESC beendet werden
    $h_GUI = GUICreate($name, 152, 145, 100, 100, $WS_Popupwindow, BitOR($WS_EX_ACCEPTFILES, $WS_EX_OVERLAPPEDWINDOW, $WS_EX_TOOLWINDOW))
    GUISetBkColor(0x000000)
    $combo = GUICtrlCreateCombo("",35, 4, 80,20)
    $dropper = GUICtrlCreateInput("", 0,30,150,80)
    $button[1] = GUICtrlCreateButton("", 0, 0, 30, 30, $BS_ICON) ; neuer Ordner
    $button[2] = GUICtrlCreateButton("", 120, 0, 30, 30, $BS_ICON) ; Ordner öffnen
    $button[3] = GUICtrlCreateButton("Hide", 0, 112, 150, 30, $BS_ICON) ; GUI wechseln
    GUICtrlSetImage($button[1], "imageres.dll", -176)
    GUICtrlSetImage($button[2], "imageres.dll", -177)
    GUICtrlSetState($dropper, $GUI_DROPACCEPTED)
    GUICtrlSetData ($combo, aktualisierung())
    GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
    GUISetState(@SW_SHOW,$h_GUI)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    If $msg = $GUI_EVENT_DROPPED Then drag_n_drop(GUICtrlRead($dropper))
    If $msg = $button[3] Then ExitLoop
    If $msg = $button[2] Then ShellExecute($basis & GUICtrlRead($combo))
    If $msg = $button[1] Then
    new_folder()
    GUICtrlSetData($combo, "")
    GUICtrlSetData($combo, aktualisierung())
    EndIf
    WEnd
    GUIDelete($h_GUI)
    GUI_2()
    EndFunc

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

    Func GUI_2();........;==> NebenGUI, klein und somit kaum störend
    $h_Child = GUICreate("", 30, 30, 0, 0, $WS_Popupwindow, $WS_EX_TOOLWINDOW)
    $button[4] = GUICtrlCreateButton("",0,0,30,30,$BS_ICON)
    GUICtrlSetImage($button[4], "imageres.dll", -217)
    GUISetState(@SW_SHOW,$h_Child)
    While 1
    If GUIGetMsg() = $button[4] Then ExitLoop
    WEnd
    GUIDelete($h_Child)
    GUI_1()
    EndFunc

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

    GUI_2();.............;==> startet die NebenGUI

    [/autoit]

    MfG Lottich

  • Schönes Ding!
    Mir sind auf die schnelle 2 Fehler aufgefallen:

    * Bei WinXP haben deine Buttons keine Icons
    * Wenn man das Programm zum ersten Mal starter und bei der Frage, ob ein Ordner erstellt werden soll einfach mit Enter bestätigt kommt ein Error und das Programm beendet sich

    Gruß

    UNPLEASANT SPOILER

    You just lost the game!

  • Huhu, sowas ähnliches habe ich schon seit ca. einem halben Jahr in Benutzung.
    Sowas ist wirklich sehr praktisch, besonders wenn man so faul ist, wie ich.:)
    Allerdings ordnet mein Script strikt nach Dateiendung, was eigentlich sehr praktisch ist... Ein Doppelklick auf das Script und alles ist sauber. 8)

    Naja, ich will nicht abschweifen:
    Schönes Script, wird sicher einigen das Aufräumen erleichtern. ;)
    Wenns sowas doch für mein Zimmer gäb...:S

    lg chess

  • Schönes Ding!
    Mir sind auf die schnelle 2 Fehler aufgefallen:

    * Bei WinXP haben deine Buttons keine Icons
    * Wenn man das Programm zum ersten Mal starter und bei der Frage, ob ein Ordner erstellt werden soll einfach mit Enter bestätigt kommt ein Error und das Programm beendet sich

    Gruß


    Hallo shadow. Das unter XP keine Icons in den Buttons dargestellt werden könnte daran liegen, dass evtl die DLL, aus der ich die Iconas beziehe, nicht vorhanden ist. Wenn ich eine neue Version rausbringe, dannwerd ich das ändern.
    Zu dem 2. Fehler: ist eigentlich keiner, nur Unachtsamkeit vom User und auch von mir selber, denn In dem Inputfeld steht ">> hier <<"
    An dieser Stelle müsste ein Ordnername angegeben werden. Das werd ich aber auch noch anpassen. :)


    ... Wenns sowas doch für mein Zimmer gäb...


    ja, das wünschte ich mir auch :D