Hab die gleiche Fehlermeldung und bei mir geht auch kein Wiederherstellen...
Wie gesagt schau dir mal http://www.midiox.com/index.htm -> 'Desktop Restore' an.
Ein Batch und schon hast du's.
Dann mußt du das nicht alles zu Fuß machen.
Oder warte bis McPoldy seine (eigene) Version fertig hat
Desktop Icons speichern/restoren mit zwei ausführbaren scripten ohne GUI
-
- [ offen ]
-
Simoncom -
15. Februar 2008 um 10:08 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
Hmmh, da musste ich wohl zu lange arbeiten. Scheint sich ja schon erledigt zu haben
-
Bin schon fleißig, habs hinbekommen das ich meinen Eigenen Dateien Ordern mit einem Script sicher und wiederherstellen kann, aber Anforderung waren ja 2 Scripte, also bastel ich mal weiter, hab ich heute was im Zug zu tun
-
So, hier mal für alle das originalScript. Jetzt Fuktionsfähig:
Benutzt _GUICtrlListView_SetItemPosition statt _GUICtrlListView_SetItemPosition32
und die Reihenfolge der Argumente bei _GUICtrlListView_SetItemText musste angepasst werden.Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#Include <GuiListView.au3>
#include <File.au3>
#include <GuiConstantsEx.au3>$guiwindow = GUICreate("Window Selection", 350, 150)
[/autoit] [autoit][/autoit] [autoit]
$font = "Arial Bold"$LoadB = GUICtrlCreateButton(" Load ", 5, 123)
[/autoit] [autoit][/autoit] [autoit]
$SaveB = GUICtrlCreateButton(" Save ", 45, 123)
GUICtrlSetFont(-1, 8.5, 400, -1, $font)
$refreshbutton = GUICtrlCreateButton("Refresh", 100, 123, 60, 25)
GUICtrlSetFont(-1, 8.5, 400, -1, $font)
$iListview = GUICtrlCreateListView(" Title|State ", 0, 0, 350, 120)
$nListview = GUICtrlGetHandle($iListview)
GUICtrlSendMsg($nListview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($nListview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)RefreshWidth()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Func RefreshWidth()
_GUICtrlListView_SetColumnWidth($nListview,1,$LVSCW_AUTOSIZE_USEHEADER)
_GUICtrlListView_SetColumnWidth($nListview,1,_GUICtrlListView_GetColumnWidth ($nListview,1)-2)
EndFuncListWindows()
[/autoit] [autoit][/autoit] [autoit]LoadInis() ; only that one visible in ListView
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Select
Case $msg = $GUI_Event_Close
GUIDelete($guiwindow)
Exit
Case $msg = $LoadB
Restore()
ContinueLoop
Case $msg = $SaveB
Save()
ListWindows()
LoadInis()
ContinueLoop
Case $msg = $refreshbutton
ListWindows()
LoadInis()
EndSelect
WEndExit
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func ListWindows()
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW)
_GUICtrlListView_DeleteAllItems ($nListview)
$aWindows = WinList("[CLASS:CabinetWClass]") ; To remove visible windows take out 'IsVisible' function.
For $i = 1 To $aWindows[0][0];~ MsgBox(0, 0, "You choose: " & ControlGetText ($aWindows[$i][0], "", "SysListView321"))
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If $aWindows[$i][0] <> "" And ControlGetText ($aWindows[$i][0], "", "SysListView321") = "FolderView" Then
GUICtrlCreateListViewItem($aWindows[$i][0], $iListview)
EndIf
Next
GUICtrlCreateListViewItem("Program Manager(Desktop)", $iListview)
_GUICtrlListView_SetColumnWidth($nListview, 0, $LVSCW_AUTOSIZE)
EndFunc ;==>ListWindowsFunc LoadInis()
[/autoit] [autoit][/autoit] [autoit]
$FileList =_FileListToArray(@ScriptDir & "\WindowsPos","*.ini")
If @error <> 0 Then
If @error = 1 Then DirCreate ( @ScriptDir & "\WindowsPos" )
Return -1
EndIfFor $i = 0 To _GUICtrlListView_GetItemCount ($nListview)-1
[/autoit] [autoit][/autoit] [autoit]
$name = _GUICtrlListView_GetItemText ( $nListview, $i ,0)
If @error <> 0 Then Return False
$Load = LoadIni($name,$i)
If $Load Then
_GUICtrlListView_SetItemText ( $nListview, $i, $Load ,1)
EndIf
NextRefreshWidth()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFuncFunc LoadIni($name,$listnr)
[/autoit] [autoit][/autoit] [autoit]Dim $PosList[1][3]
[/autoit] [autoit][/autoit] [autoit]If Not FileExists(@ScriptDir & "\WindowsPos\"&$name&".ini") Then Return False ; keine Ini gefunden
[/autoit] [autoit][/autoit] [autoit]
$IniSec = IniReadSection (@ScriptDir & "\WindowsPos\"&$name&".ini","Positions by Name")
If @error=1 Then
Return "Error in ini" ; ini gefunden aber fehlerhaft
EndIfReturn "Positions found"
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func Restore()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$winname = _GUICtrlListView_GetItemText ( $nListview, _GUICtrlListView_GetSelectedIndices($nListview) ,0)
MsgBox(0, '', $winname)
If $winname = "Program Manager(Desktop)" Then
$handle = ControlGetHandle("Program Manager", "", "SysListView321")
Else
$handle = ControlGetHandle($winname, "", "SysListView321")
EndIf
_GUICtrlListView_BeginUpdate ($handle)
For $i = 0 To _GUICtrlListView_GetItemCount ($handle)
$name = _GUICtrlListView_GetItemText ($handle, $i)
$x = IniRead(@ScriptDir & "\WindowsPos\"&$winname&".ini", "Positions by Name", $name & "x", "Unknown")
$y = IniRead(@ScriptDir & "\WindowsPos\"&$winname&".ini", "Positions by Name", $name & "y", "Unknown")
If $x <> "Unknown" Then
_GUICtrlListView_SetItemPosition ($handle, $i, $x, $y)
EndIf
Next
_GUICtrlListView_EndUpdate ($handle)
EndFunc ;==>RestoreFunc Save()
[/autoit]
$winname = _GUICtrlListView_GetItemText ( $nListview, _GUICtrlListView_GetSelectedIndices($nListview))
If $winname = "Program Manager(Desktop)" Then
$handle = ControlGetHandle("Program Manager", "", "SysListView321")
Else
$handle = ControlGetHandle($winname, "", "SysListView321")
EndIf
If @error = 1 Then MsgBox(0,0," Error(ControlGetHandle) : cant get handle")
$t= MsgBox(4, "Confirm","Window Name: "&$winname&@CRLF& _
"Icon Count: "&_GUICtrlListView_GetItemCount ($handle)&@CRLF& _
"Name of first Icon: "&_GUICtrlListView_GetItemText($handle, 0)&@CRLF&@CRLF& _
" Do you really want to save?")
If $t <> 6 Then Return
_GUICtrlListView_SetItemText ( $nListview, _GUICtrlListView_GetSelectedColumn ($nListview), 1, "saving..." )
FileDelete(@ScriptDir & "\WindowsPos\"&$winname&".ini")
For $i = 0 To _GUICtrlListView_GetItemCount ($handle)
$pos = _GUICtrlListView_GetItemPosition ($handle, $i)
$name = _GUICtrlListView_GetItemText ($handle, $i)
If $pos[0] = True Then
IniWrite(@ScriptDir & "\WindowsPos\"&$winname&".ini", "Positions by Name", $name & "x", $pos[0])
IniWrite(@ScriptDir & "\WindowsPos\"&$winname&".ini", "Positions by Name", $name & "y", $pos[1])
EndIf
Next
_GUICtrlListView_SetItemText ( $nListview, _GUICtrlListView_GetSelectedIndices ($nListview), "done" ,1)
RefreshWidth()
Sleep(1500)
EndFunc ;==>SaveMcPoldy: Mach 1 Script, das mit Commandline Argumenten geht
Ohne Argumente macht es Restore, wenn man es mit Script.exe -save aufruft, dann Speichert es. -
Hier erst einmal was gaaanz einfaches, wenn das Script gestartet wird, werden die Positionen gespeichert, wird das Script beendet, dann werden die Icons wiederhergestellt.
Wichtig, wenn das Scipt läuft keine Icons hinzufügen oder entfernen!!!! Ist ja auch nur die erste Version@progandy Dein Wunsch ist mir Befehl denke auch mal das es so am sinnvollsten ist.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#Include <GuiListView.au3>Opt("OnExitFunc","OnAutoItExit")
[/autoit] [autoit][/autoit] [autoit]$handle = ControlGetHandle("Program Manager", "", "SysListView321")
[/autoit] [autoit][/autoit] [autoit]
$anzIcons = _GUICtrlListView_GetItemCount ($handle)
Dim $arrPos[$anzIcons][3]
For $i = 0 To $anzIcons -1
$arrPos[$i][0] = _GUICtrlListView_GetItemPositionX ($handle,$i)
$arrPos[$i][1] = _GUICtrlListView_GetItemPositionY ($handle,$i)
$arrPos[$i][2] = _GUICtrlListView_GetItemText($handle,$i)
NextWhile 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
WEndFunc OnAutoItExit()
[/autoit]
For $i = 0 To $anzIcons -1
_GUICtrlListView_SetItemPosition($handle,$i,$arrPos[$i][0],$arrPos[$i][1])
Next
EndFunc -
So habe jetzt mal was zusammen gebastelt und lege es in Skripte ab ( Link zum Skript )
-