有什么办法可以保存桌面图标的排列位置?
比如桌面的图标都要精心排列过的一不小心就被弄乱了,
所以想有什么办法可以找到桌面图标保存的配置文件或者注册表位置 然后保存下来。
弄乱了 把注册表或者配置文件替换回去,重新启动就能恢复原来的排列。
我用BC找过文件的位置 也对比过注册表,就是不知道 图标排列的位置保存在哪里。
希望知道的朋友能 指点一下
谢谢了 .........没人理我:face (30): 官方论坛有,不过源代码基于Auto3Lib 新版不支持 要自己改...
Desktop Icons Restorator http://www.autoitscript.com/forum/index.php?showtopic=53209
IconMap http://www.autoitscript.com/forum/index.php?showtopic=52575
获取图标坐标,保存在文件里, 在还原
[ 本帖最后由 xayle 于 2009-2-25 05:03 编辑 ] --------------------------------------------------------------------------------
#NoTrayIcon
#AutoIt3Wrapper_icon=D:\autoit3\Aut2Exe\Icons\FOLDER.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=2008-04-19, 23:31
#AutoIt3Wrapper_Res_Description=桌面图标同步程序
#AutoIt3Wrapper_Res_Fileversion=1.0.0.1
#AutoIt3Wrapper_Res_LegalCopyright=Amu
#include <GuiListView.au3>
Opt("MustDeclareVars", 1)
Global $hWndManager = WinGetHandle("Program Manager")
Global $hWndDesktop = ControlGetHandle("Program Manager","",1)
If Not IsDeclared("GWL_STYLE") Then Global Const $GWL_STYLE = -16
Global $LVS_Style = _WinAPI_GetWindowLong($hWndDesktop, $GWL_STYLE)
Global $inifile, $iSet, $iRefresh, $SNAPTOGRID
If $CmdLine Then
For $i = 1 To $CmdLine
Select
Case StringRegExp($CmdLine[$i], '^[/-](?i)load[=:].+$|^[/-](?i)l[=:].+$') And Not $inifile
$iSet = 1
$inifile = StringRegExpReplace($CmdLine[$i], '^[/-](?i)load[=:]?|^[/-](?i)l[=:]?', "")
Case StringRegExp($CmdLine[$i], '^[/-](?i)save[=:].+$|^[/-](?i)s[=:].+$') And Not $inifile
$iSet = 0
$inifile = StringRegExpReplace($CmdLine[$i], '^[/-](?i)save[=:]?|^[/-](?i)s[=:]?', "")
Case StringRegExp($CmdLine[$i], '^[/-](?i)SnapToGrid[=:]\d+$|^[/-](?i)g[=:]\d+$') And $inifile
$SNAPTOGRID = Number (StringRegExpReplace($CmdLine[$i], '^[/-](?i)SnapToGrid[=:]?|^[/-](?i)g[=:]?', "") )
Case StringRegExp($CmdLine[$i], '^[/-](?i)Refresh$|^[/-](?i)r$')
$iRefresh = 1
Case StringRegExp($CmdLine[$i], '^[/-](?i)Help$|^[/-](?i)[?h]$')
MsgBox(64,"参数帮助!","AutoIcon.exe [</load|/save>=<file>] " & @CRLF & "" & @CRLF & _
"/load=file 要加载的配置文件。" & @CRLF & "/save=file 要保存的配置文件。" & @CRLF & _
"/G=<0|1> 为“0”取消图标对齐到网格,为“1”图标对齐到网格,默认不作更改。" & @CRLF & "/R 相当于桌面右键“刷新”")
Exit
Case Not $inifile
$inifile = $CmdLine[$i]
If FileExists($inifile) Then $iSet = 1
EndSelect
Next
Else
If Not IsDeclared("iMsgBoxAnswer") Then Dim $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(547,"注意!","" & @CRLF & "选“是”保存桌面图标位置信息到文件" & @CRLF & "" & @CRLF & "选“否”从文件读取并排列桌面图标。")
Select
Case $iMsgBoxAnswer = 6 ;Yes
$inifile = FileSaveDialog( "输入一个文件名。", @ScriptDir, "配置文件(*.ini)", 2)
If @error Or Not $inifile Then Exit
$iSet = 0
If Not StringRegExp($inifile, "\.ini$") Then $inifile &= ".ini"
Case $iMsgBoxAnswer = 7 ;No
$inifile = FileOpenDialog( "选择一个文件。", @ScriptDir, "配置文件(*.ini)", 1)
If @error Or Not $inifile Then Exit
$iSet = 1
Case $iMsgBoxAnswer = 2 ;Cancel
Exit
EndSelect
EndIf
If $iSet Then
If $SNAPTOGRID Then $SNAPTOGRID = $LVS_EX_SNAPTOGRID
If IsNumber ($SNAPTOGRID) Then _SendMessage($hWndDesktop, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_SNAPTOGRID, $SNAPTOGRID)
If BitAND($LVS_Style, $LVS_AUTOARRANGE) Then _WinAPI_SetWindowLong($hWndDesktop, $GWL_STYLE, $LVS_Style - $LVS_AUTOARRANGE );取消自动排列
If $iRefresh Then DllCall("shell32.dll", "none", "SHChangeNotify", "long", 0x8000000, "int", 0, "ptr", 0, "ptr", 0);刷新图标
_SaveAndLoadIconPos($inifile, 1)
;Run("RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters");刷新桌面(通过复制文件的方式替换壁纸文件适用)
Else
_SaveAndLoadIconPos($inifile)
EndIf
Func _SaveAndLoadIconPos($iFile, $iLoad = 0)
Local $iCount, $iIndex, $sName, $xy
If Not IsHWnd($hWndManager) Then $hWndManager = WinGetHandle("Program Manager")
If Not IsHWnd($hWndDesktop) Then $hWndDesktop = ControlGetHandle("Program Manager","",1)
$iCount = ControlListView($hWndManager, "", $hWndDesktop, "GetItemCount")
If @error Then
SetError(1)
Return 0
EndIf
If Not $iLoad And FileExists($iFile) Then IniDelete($iFile, "图标位置")
For $iIndex = 0 to $iCount - 1
$sName = ControlListView($hWndManager, "", $hWndDesktop,"GetText", $iIndex)
If $iLoad Then
$xy = StringSplit (IniRead ($iFile, "图标位置", $sName, ""), ",")
If $xy = 2 Then _
_SendMessage($hWndDesktop, $LVM_SETITEMPOSITION, $iIndex, BitOR(BitShift($xy, -16), BitAND($xy, 0xffff) ) )
Else;保存图标信息
$xy = _GUICtrlListView_GetItemPosition($hWndDesktop, $iIndex)
IniWrite($iFile, "图标位置", $sName, $xy & "," & $xy )
EndIf
Next
Return 1
EndFunc 有空得学习一下.留个标 谢谢楼主分享 可呵!楼上的不错 论坛里有http://www.autoitx.com/forum.php?mod=viewthread&tid=204&highlight=%D7%C0%C3%E6%2B%CE%BB 这个就可以。
页:
[1]