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
;#################################################################################################
;
; 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
;
;#################################################################################################
;#################################################################################################
; Einfügen der Include Dateien
;#################################################################################################
#include <Constants.au3>
#Include <GuiListView.au3>
#include <File.au3>
#include <Array.au3>
;#################################################################################################
; Optionen setzen
;#################################################################################################
#NoTrayIcon ;Kein TrayIcon anzeigen
Opt("MustDeclareVars", 1) ;Variablen müssen deklariert werden
;#################################################################################################
; 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
;#################################################################################################
; 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
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
;#################################################################################################
; _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
;#################################################################################################
; _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
;#################################################################################################
; _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