Create Your Own Auto Desktop Wallpaper Changer: Simple Scripts & Apps
Overview
Quick guide to building a wallpaper changer that automatically rotates desktop backgrounds on Windows or macOS using simple scripts or lightweight apps.
Options (pick one)
-
Windows — PowerShell script
- Uses Scheduled Task to run periodically.
- Key steps: store images in a folder, write PowerShell to pick next image and call SystemParametersInfo via COM or registry, schedule with Task Scheduler.
-
macOS — AppleScript + Automator/launchd
- AppleScript changes desktop picture; Automator or launchd runs it on a timer.
- Key steps: images in a folder, AppleScript selects next image, use launchd plist for intervals.
-
Cross-platform — Python script
- Uses platform-specific libraries: ctypes or pywin32 on Windows, appscript or osascript on macOS, and gsettings for some Linux desktops.
- Can run as a background service (Windows service, launchd, or systemd timer).
-
Use a lightweight app
- Windows: Wallpaper Engine (paid), John’s Background Switcher (free).
- macOS: Wallcat, Wallpaper Wizard, or using the built-in “Change picture” option in System Preferences > Desktop & Screen Saver.
Minimal example snippets
- PowerShell (Windows):
powershell
\(folder</span><span> = </span><span class="token" style="color: rgb(163, 21, 21);">"C:\Wallpapers"</span><span> </span><span></span><span class="token" style="color: rgb(54, 172, 170);">\)files = Get-ChildItem \(folder</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">-</span><span>Include </span><span class="token" style="color: rgb(57, 58, 52);">*</span><span class="token" style="color: rgb(57, 58, 52);">.</span><span>jpg</span><span class="token" style="color: rgb(57, 58, 52);">,</span><span class="token" style="color: rgb(57, 58, 52);">*</span><span class="token" style="color: rgb(57, 58, 52);">.</span><span>png </span><span class="token" style="color: rgb(57, 58, 52);">|</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">Sort-Object</span><span> Name </span><span></span><span class="token" style="color: rgb(54, 172, 170);">\)stateFile = “\(env</span><span class="token" style="color: rgb(163, 21, 21);">:APPDATA\wallpaper_index.txt"</span><span> </span><span></span><span class="token" style="color: rgb(54, 172, 170);">\)index = if (Test-Path \(stateFile</span><span class="token" style="color: rgb(57, 58, 52);">)</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">{</span><span> </span><span class="token">[int]</span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(57, 58, 52);">Get-Content</span><span> </span><span class="token" style="color: rgb(54, 172, 170);">\)stateFile) } else { 0 } \(path</span><span> = </span><span class="token" style="color: rgb(54, 172, 170);">\)files[\(index</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">%</span><span> </span><span class="token" style="color: rgb(54, 172, 170);">\)files.Count].FullName Add-Type @” using System.Runtime.InteropServices; public class Native { [DllImport(”user32.dll”,SetLastError=true)] public static extern bool SystemParametersInfo(int uAction,int uParam,string lpvParam,int fuWinIni); } “@ [Native]::SystemParametersInfo(20,0,\(path</span><span class="token" style="color: rgb(57, 58, 52);">,</span><span>3</span><span class="token" style="color: rgb(57, 58, 52);">)</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(54, 172, 170);">\)index + 1) | Out-File $stateFile -Force
- AppleScript (macOS):
applescript
set imgFolder to POSIX file ”/Users/you/Wallpapers” as alias tell application “System Events” set imgs to every file of folder imgFolder set chosen to item 1 of imgs – rotate logic: store index in a file or randomize set picture of desktop 1 to (chosen as alias) end tell
- Python (cross-platform outline):
python
# outline: detect OS, pick image, run OS-specific command: # Windows: ctypes.windll.user32.SystemParametersInfoW(20,0, path, 3) # macOS: os.system(f”osascript -e ‘tell application \“System Events\” to set picture of desktop 1 to POSIX file \“{path}\”’“)
Scheduling
- Windows: Task Scheduler — create task to run script every N minutes/hours or at login.
- macOS: launchd — create a plist with StartInterval or calendar-based triggers.
- Linux: systemd timers or cron.
Features to add
- Random vs sequential rotation
- Per-monitor wallpapers for multi-monitor setups
- Transition/fade effects (some apps only)
- Image scaling/cropping to match resolution
- Exclude duplicates and support subfolders
Quick recommendation
- For ease: use a dedicated app (John’s Background Switcher on Windows, built-in macOS setting).
- For control/customization: use the PowerShell or Python approach and schedule it.
If you want, I can: provide a ready-to-use PowerShell script configured for your folder, or a launchd plist + AppleScript pair for macOS—tell me which OS and your wallpapers folder path.
Leave a Reply