Desktop Icons wiederherstellen

  • Nabend, im Hilfebereich hatten wir heute die Frage wie man es hin bekommt das man die Icon Positionen speichern kann und die Icons an die Usprungspositionen zurück bringen kann. Nützlich ist das zum Beispiel wenn man ein Spiel hat, was die Bildschirmauflösung ändert (z. B. von 1280x1024 auf 800x600) und wenn man mit dem Spiel fertig ist alle mühevoll sortierten Icons auf dem Desktop durcheinander sind.

    Zum Skript selber, ich habe es jetzt mal so gebastelt:
    1. das die Positionen in einer INI Datei abgelegt werden
    2. das wenn eine Verknüpfung gelöscht wird, diese aber zuvor in der INI gespeichert wurde übergangen wird
    3. das man das Skript über zwei Parameter bedient (-save und -restore)

    Spoiler anzeigen
    [autoit]


    ;#################################################################################################
    ;
    ; Titel: Restore-IconPos-Desktop
    ; Datum: 15. Feb. 2008
    ; Version: 1.0
    ;
    ; Anmerkungen:
    ;
    ; - Die Position der Icons und der Titel wird in einer INI Datei gespeichert
    ; - Das Script wird über Parameter aufgerufen:
    ; -save = Speichert die Positionen
    ; -restore = Plaziert die Icons wieder da wo sie waren
    ;
    ;#################################################################################################

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

    ;#################################################################################################
    ; Einfügen der Include Dateien
    ;#################################################################################################
    #include <Constants.au3>
    #Include <GuiListView.au3>
    #include <File.au3>
    #include <Array.au3>

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

    ;#################################################################################################
    ; Optionen setzen
    ;#################################################################################################
    #NoTrayIcon ;Kein TrayIcon anzeigen
    Opt("MustDeclareVars", 1) ;Variablen müssen deklariert werden

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

    ;#################################################################################################
    ; Variablen deklarieren
    ;#################################################################################################
    Local $handle ;Handle für den Desktop
    Local $anzIcons ;Anzahl der Icons auf dem Desktop
    Local $arrIcons[1] ;Array für Restore
    Local $arrayPos ;Position im Array
    Local $txt ;Für das zwischenspeichern von Texten
    Local $int ;Als Zähler Variable
    Local $icon ;Name des Icon
    Local $posX ;X Position
    Local $posY ;y Position
    Local $Mode = "Help" ;In welchem Modus das Script gestartet wurde
    Local $iniFile = @ScriptDir & "\icons.ini" ;Pfad zu der Ini-Datei

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

    ;#################################################################################################
    ; Programm Einstigspunkt (POE)
    ;#################################################################################################
    If $CmdLine[0] > 0 Then
    $Mode = $CmdLine[1]
    _CheckIniExsit()
    Switch $CmdLine[1]
    Case "-save"
    ToolTip("Positionen der Icons werden gespeichert!",0,0,"Info")
    Sleep(1000)
    _SavePos()
    Case "-restore"
    ToolTip("Icons werden wieder hergestellt!",0,0,"Info")
    Sleep(1000)
    _RestorePos()
    Case Else
    _ShowHelp()
    EndSwitch
    Else
    _ShowHelp()
    EndIf

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

    Exit 0 ;Programm wird verlassen

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

    ;#################################################################################################
    ; _CheckIniExsit
    ; Diese Funktion prüft ob die INI Datei vohanden ist, falls Nein, wird eine leere Datei
    ; erstellt. Ist eine vorhanden, wird gelöscht und eine neue erstellt, aber nur bei -save
    ;#################################################################################################
    Func _CheckIniExsit()
    IF Not FileExists($iniFile) Then
    _FileCreate($iniFile)
    If @error Then
    MsgBox(48,"Fehler","INI-Datei konnte nicht erstellt werden.")
    Exit 1
    EndIf
    ElseIf $Mode = "-save" Then
    If FileDelete($iniFile) = 0 Then
    MsgBox(48,"Fehler","INI-Datei konnte nicht gelöscht werden.")
    Exit 1
    EndIf
    EndIf
    EndFunc

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

    ;#################################################################################################
    ; _ShowHelp
    ; Wenn das Script ohne Parameter gestartet wird, wird diese Hilfe angezeigt, oder wenn ein
    ; falscher Parameter übergeben wurde.
    ;#################################################################################################
    Func _ShowHelp()
    $txt = "Parameter:" & @CRLF
    $txt &= "-save = Speichert die Positionen" & @CRLF
    $txt &= "-restore = Plaziert die Icons wieder da wo sie waren"
    MsgBox(64,"Hilfe - Restore-IconPos-Desktop", $txt)
    Exit 0
    EndFunc

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

    ;#################################################################################################
    ; _SavePos
    ; Speichern der Icon Positionen in der INI Datei
    ;#################################################################################################
    Func _SavePos()
    $handle = ControlGetHandle("Program Manager", "", "SysListView321")
    $anzIcons = _GUICtrlListView_GetItemCount ($handle) - 1
    IniWrite($iniFile,"Global","Anzahl",$anzIcons)
    For $int = 0 To $anzIcons
    IniWrite($iniFile,"IconPos" & $int,"Icon",_GUICtrlListView_GetItemText($handle,$int))
    IniWrite($iniFile,"IconPos" & $int,"X-Pos",_GUICtrlListView_GetItemPositionX ($handle,$int))
    IniWrite($iniFile,"IconPos" & $int,"Y-Pos",_GUICtrlListView_GetItemPositionY ($handle,$int))
    Next
    EndFunc

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

    ;#################################################################################################
    ; _RestorePos
    ; Speichern der Icon Positionen in der INI Datei
    ;#################################################################################################
    Func _RestorePos()
    $anzIcons = IniRead($iniFile,"Global","Anzahl",-1)
    If $anzIcons = -1 Then
    MsgBox(48,"Fehler","INI-Datei ist leer.")
    Exit 1
    Else
    $handle = ControlGetHandle("Program Manager", "", "SysListView321")
    ReDim $arrIcons[_GUICtrlListView_GetItemCount ($handle)]
    For $int = 0 To UBound($arrIcons) - 1
    $arrIcons[$int] = _GUICtrlListView_GetItemText($handle,$int)
    Next
    For $int = 0 To $anzIcons
    $icon = IniRead($iniFile,"IconPos" & $int,"Icon",-1)
    $posX = IniRead($iniFile,"IconPos" & $int,"X-Pos",-1)
    $posY = IniRead($iniFile,"IconPos" & $int,"Y-Pos",-1)
    If $icon = -1 Or $posX = -1 Or $posY = -1 Then ContinueLoop
    $arrayPos = _ArraySearch($arrIcons,$icon,0,0,1,False)
    If $arrayPos = -1 Then ContinueLoop
    _GUICtrlListView_SetItemPosition($handle,$arrayPos,$posX,$posY)
    Next
    EndIf
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)