;~ 简介========================== ;~ 修改:醉里挑灯看剑 ;~ 感谢:_悠然生活_自由 ;~ 时间:2017年4月30日21:48:05 ;~ [Wallpaper Changer] ; 初始化参数 #SingleInstance Force #NoEnv SendMode Input SetWorkingDir %A_ScriptDir% ;~ ;以管理员身份运行(直接用就行了) Loop, %0% { param := %A_Index% params .= A_Space . param } ShellExecute := A_IsUnicode ? "shell32\ShellExecute":"shell32\ShellExecuteA" if not A_IsAdmin { if A_IsCompiled DllCall(ShellExecute, uint, 0, str, "RunAs", str, A_ScriptFullPath, str, params , str, A_WorkingDir, int, 1) else DllCall(ShellExecute, uint, 0, str, "RunAs", str, A_AhkPath, str, """" . A_ScriptFullPath . """" . A_Space . params, str, A_WorkingDir, int, 1) ExitApp } ; 一些全局变量 IfNotExist,%A_ScriptDir%\wpchange.ini { FileAppend,########作者:醉里挑灯看剑########`n########QQ:1432820184########,%A_ScriptDir%\wpchange.ini } IniFile = %A_ScriptDir%\wpchange.ini TempWallpaper = %A_ScriptDir%\Wallpapers\currentwallpaper.jpg IniRead, WallPaperFolder, %IniFile%, Settings, WPFolder, NOT_SET ; 从IniFile文件中读取设置 IfNotExist, %A_ScriptDir%\Wallpapers\ FileCreateDir, %A_ScriptDir%\Wallpapers\ if WallPaperFolder = NOT_SET ; 如果不存在IniFile文件, 或者已经设置重置了 { FileSelectFolder, SetFolder, , 3 ; 显示壁纸的文件夹 if SetFolder = { MsgBox, 你尚未选择壁纸文件夹,程序将退出. ; 如果没有选择文件夹将无法执行相应的功能,如果用户没有选择文件夹,程序将退出。 ExitApp } else { SetFolder := RegExReplace(SetFolder, "\\$") ; 如果存在反斜线,则删除 WallPaperFolder = %SetFolder%\ ; 为了实现我们的功能需要反斜线,但首先删除它消除了双反斜线的可能性 IniWrite, %WallPaperFolder%, %IniFile%, Settings, WPFolder ; 将信息写入IniFile中,重启时就不需要再配置 MsgBox 设置已经保存,如需重置,请在托盘处选择 "[重置文件夹]" 项或者直接删除[ %IniFile% ] 文件。`n`n您现在可以通过按“[Win+鼠标中键]”来切换壁纸,该程序将从您提供的文件夹中选择一个随机图像,并将其设置为墙纸。 } } RefreshWPs() { Global ArrayCount=0 Loop, %WallPaperFolder%*.jpg ; 在壁纸文件夹下检查所有的jpg文件 { ArrayCount+=1 Array%ArrayCount% := A_LoopFileName ; 为这些文件创建一个数据 } } ChangeWP() { global Random, filenum, 1, %ArrayCount% ;这里设定了随机数,如果从这里入手,应该是可以改成顺序显示的。TrayTip的语句全部被我禁用了。之后再改。 filecalled := Array%filenum% ; 任意选择一张图片作为新的壁纸 TrayTip, 修改壁纸, 将"%WallPaperFolder%%filecalled%" 设置为壁纸,,1 FileCopy, %WallPaperFolder%%filecalled%, %TempWallpaper%, 1 ; 复制文件到临时文件夹下 if ErrorLevel = 1 { MsgBox 当复制 %WallPaperFolder%%filecalled% 到临时文件夹 %TempWallpaper% 时,文件复制出错,请联系开发者!%FileCopyError% } RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop, WallPaper, %WallPaperFolder%%filecalled% DllCall("SystemParametersInfo", UInt, 0x14, UInt, 0, Str, TempWallpaper, UInt, 2) Sleep, 500 ; 不能连续的更换壁纸太快. return } Menu,Tray,NoStandard ;取消自带的托盘 TrayTip, Wallpaper Changer,壁纸刷新中...,,1 ;TrayTip [, Title, Text, Seconds, Options]最后1表示“1: 信息图标” RefreshWPs() TrayTip, Wallpaper Changer,壁纸列表已经刷新! (发现 %ArrayCount% 张壁纸 ),1,1 Menu, TRAY, Add Menu, TRAY, Add, 刷新壁纸, RefreshWallpapers Menu, TRAY, Add, 改变壁纸, ChangeWallpaper Menu, TRAY, Add Menu, TRAY, Add, 重置文件夹, RstFolder Menu,Tray,Add,退出脚本,do_Exit return ; 结束自动编译会话 do_Exit: ;执行退出脚本命令 ExitApp ;退出脚本 RefreshWallpapers: TrayTip, Wallpaper Changer,壁纸刷新中...,1,1 RefreshWPs() TrayTip, Wallpaper Changer,壁纸列表已经刷新! (发现 %ArrayCount% 张壁纸 ),1,1 ;~ MsgBox, 262208, 壁纸刷新中..., 壁纸列表已经刷新! (发现 %ArrayCount% 张壁纸 ) return ChangeWallpaper: ChangeWP() return RstFolder: MsgBox, 64, 重置文件夹, 壁纸更换,重置文件夹设置需要程序重新启动。下次启动时您可以选择新文件夹。是否要重置设置并关闭应用程序? IfMsgBox Ok { IniWrite, NOT_SET, %IniFile%, Settings, WPFolder ; 设置WPFolder为"NOT_SET",下次启动时重新选择文件夹 ExitApp } else { TrayTip, 设置取消,没有做任何更改!,,1 } return !w::ChangeWP() ; 调试的快捷键 ^!Numpad0::MsgBox IsAdmin: %A_IsAdmin% - My Documents: %A_ScriptDir%\Wallpapers ^!Numpad1::ListVars ^!Numpad2::MsgBox Last Copy: "%WallPaperFolder%%filecalled%" to "%A_ScriptDir%\Wallpapers\currentwallpaper.jpg" f5::Reload