# Auto Theme + Wallpaper Switcher (Windows) This is a lightweight Windows tray app that **automatically switches between light and dark mode** based on the time of day (6 AM to 6 PM), and optionally changes your desktop wallpaper. It also silently restarts `explorer.exe` after theme changes to force a full UI refresh (taskbar, Start menu, etc.). ![cover](/screenshot/cover.jpg) Runs quietly in the background with a tray icon and auto-starts on login (via `shell:startup`). --- ## Features - Automatically switches between **light** and **dark** mode - Optionally changes wallpaper to match the theme - Gracefully skips if wallpaper is missing (no crashes) - Runs silently with a **tray icon** and no console window - Uses native Windows APIs (registry + wallpaper) - Automatically **restarts `explorer.exe`** for full theme refresh --- ## Setup Instructions Place these files in the same directory: ``` themechanger.exe ← compiled binary icon.ico ← tray icon (required) light.jpg/png/bmp/... ← optional day wallpaper dark.jpg/png/bmp/... ← optional night wallpaper ``` Supported image formats: `.jpg`, `.jpeg`, `.png`, `.bmp`, `.webp` The app will look for `light.*` and `dark.*` in its own folder. If no image is found, it simply skips the wallpaper change. --- ## Auto-Start on Login To launch the app automatically when you log in: 1. Press `Win + R` 2. Type: `shell:startup` and press Enter 3. **Create a shortcut to `themechanger.exe`:** * Right-click on `themechanger.exe`. * Select "Create shortcut". 4. **Move the shortcut you just created into the Startup folder.** The Startup folder is the one that opened in step 2. Done! It will now auto-start silently every time. > No need to edit the registry or install anything! --- ## Build It Yourself If you'd like to compile from source: ### 1. Install Go [https://go.dev/dl](https://go.dev/dl) ### 2. Initialize your Go module ```bash go mod init themechanger go mod tidy ``` ### 3. Build the executable ```bash go build -ldflags="-H windowsgui" -o themechanger.exe ``` This produces a GUI app (no console window). --- ## Technical Details - Uses Go and the [`systray`](https://github.com/getlantern/systray) library for tray UI - Theme switching via registry keys: - `AppsUseLightTheme` - `SystemUsesLightTheme` - Wallpaper changes with `SystemParametersInfoW` API - Explorer restart via: ```bash taskkill /f /im explorer.exe && start explorer.exe ``` --- ## Tray Preview You must provide your own `icon.ico` in the same folder — this will be used as the tray icon. ![tray](/screenshot/tray.jpg) > Tip: You can create `.ico` files from PNGs using online converters like [icoconvert.com](https://icoconvert.com) --- ## Notes - You can manually quit the app from the tray menu - Time check runs every 60 seconds - Changing the clock or timezone will trigger a switch automatically - No admin rights needed - ⚠️ **Warning:** This program will kill and restart `explorer.exe` to ensure proper theme application after a mode switch. This is necessary because `explorer.exe` can sometimes become buggy and not fully apply the new theme, leaving behind visual artifacts. **Please ensure `explorer.exe` is not performing any sensitive tasks like copying files before a theme switch occurs, as this process will interrupt those operations.** --- ## Optional Ideas - Add GUI to configure start/stop time - Manual override options in tray menu - Geo-based sunrise/sunset switching --- ## License MIT — free for personal and commercial use. --- Made with Go, Windows quirks, and Indocafe Coffeemix ☕