找回密码
 加入
搜索
查看: 1250|回复: 0

那个高手帮下忙

[复制链接]
发表于 2009-10-12 10:56:24 | 显示全部楼层 |阅读模式
#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[0] Then
     For $i = 1 To $CmdLine[0]
         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>] [/G=<0|1>] [/R]" & @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[0] = 2 Then _
             _SendMessage($hWndDesktop, $LVM_SETITEMPOSITION, $iIndex, BitOR(BitShift($xy[2], -16), BitAND($xy[1], 0xffff) ) )
         Else;保存图标信息
             $xy = _GUICtrlListView_GetItemPosition($hWndDesktop, $iIndex)
             IniWrite($iFile, "图标位置", $sName, $xy[0] & "," & $xy[1] )
         EndIf     
     Next
     Return 1
EndFunc

那个高手帮忙把上面的脚本分离出两个程序,一个是保存位置的,一个是还原位置的谢谢了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-22 19:45 , Processed in 0.068226 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表