Your wall display, on autopilot. π
Rotate any running Windows apps β dashboards, camera feeds, spreadsheets β on a shop-floor or office display. Drag, drop, set the seconds, hit Start, close the window. It just keeps going.
β¬ Download Β· Quick start Β· How it works Β· Docs (DE) Β· Roadmap
Every factory hall, control room and open office has that screen: one PC, one big monitor, and three things people need to see β the production dashboard, the camera feed, the shift plan. Someone switches between them by hand. Or nobody does.
Browser tab rotators only rotate browser tabs. Kiosk software wants you to rebuild everything as a web page. Window Rotator rotates the real windows you already have open β any app, as-is.
| π±οΈ Drag & drop setup | All open windows with icon and title on the left β drag them into your rotation. No config files, no scripting. |
| β±οΈ Per-window timing | 30 s for the dashboard, 15 s for the camera. Live total cycle time. Toggle entries on/off without deleting them. |
| π§ Survives restarts | App crashed? PC rebooted? Windows are re-matched by process, class and title β and it never guesses: a wrong window on a wall display is worse than none. |
| π₯οΈ Multi-monitor aware | Pick a target display; windows are moved there (maximized state kept), other screens stay untouched. |
| π«₯ Lives in the tray | Close the window, rotation keeps running. Pause, resume, next, stop β all from the tray menu. |
| π‘οΈ Built for 24/7 | Monotonic clock, hung-app detection, verified activation with retry-then-skip, auto-pause on session lock, crash-safe atomic saves, daily logs. |
| π Autostart | Starts at logon straight into the tray and resumes your last profile. |
| πͺΆ Zero dependencies | Native WPF on .NET 10, single self-contained EXE. No Electron, no browser, no runtime install. |
![]() |
![]() |
| Per-profile options & program settings | Event log for unattended operation |
The UI is in German for now β English localisation is on the roadmap. PRs welcome! π¬π§
- Grab
WindowRotator-<version>-win-x64.zipfrom the latest release and unzip it (downloaded?Unblock-Filefirst β the EXE isn't signed yet). - Install for the current user β no admin rights needed:
β¦or just run
powershell -ExecutionPolicy Bypass -File Install.ps1 -Autostart
WindowRotator.exefrom anywhere. - Open the apps you want to show, drag them into the rotation, set the seconds, press Start. Done. β
π Full guides (German): Kurzanleitung Β· Administratorhandbuch
flowchart TB
UI["WPF UI<br/><sub>drag & drop Β· rotation editor</sub>"] --> VM["MainViewModel<br/><sub>profiles Β· re-matching</sub>"]
VM --> E["RotationEngine<br/><sub>pure state machine Β· timing Β· retry/skip</sub>"]
E -- "activate / verify (injected)" --> W["Win32 layer<br/><sub>discovery Β· matching Β· activation</sub>"]
VM --> S["Store<br/><sub>versioned JSON Β· autosave</sub>"]
T["Tray host<br/><sub>single instance Β· session lock</sub>"] --> VM
- State machine:
Stopped β Running β Paused, plusWaitingwhen no window is available (re-checked every 5 s). - Activation: restore if minimized β move to target monitor β
SetForegroundWindowβ optional double-ALT fallback for Windows' focus lock β verified 1 s later. Everything that touches a foreign window is asynchronous, so a frozen app can never freeze the rotator. - Re-matching: same process (+ optional title filter) β exact title β exactly one candidate with the same window class β otherwise the entry is marked ambiguous and skipped.
dotnet build Fensterwechler.slnx # 0 warnings, or it didn't happen
dotnet run --project Fensterwechler.Tests # dependency-free self-check
powershell -File build\publish.ps1 # β dist\WindowRotator-<version>-win-x64.zip| Path | What's inside |
|---|---|
Fensterwechler/ |
The app (WPF, MVVM, Win32 interop) |
Fensterwechler.Tests/ |
Self-check for engine, matcher and persistence |
build/ |
publish.ps1, Install.ps1, icon generator |
samples/ |
Example profile (Edge dashboard + camera client) |
docs/ |
User & admin guides (German), screenshots |
Fensterwechsler is German for "window switcher" β the working title lives on in the header and (minus one letter) in the Fensterwechler namespace. π©πͺ
- π¬π§ English UI (resource-based localisation)
- πΌοΈ Live thumbnails in the window library (DWM thumbnails)
- ποΈ Time-based profiles (e.g. night shift layout)
- π Code-signed releases
- π¦ winget package
Got an idea? Open a feature request β¨
Contributions are super welcome β see CONTRIBUTING.md. Please follow the Code of Conduct; security issues go through SECURITY.md.
MIT β use it, ship it, put it on every screen in the building.

