English | 日本語
Windows multi-monitor profile switcher with per-profile hotkeys and system tray residency
Explore the docs »
Report Bug
·
Request Feature
·
Discussions
Table of Contents
Windows multi-monitor profile switcher. Inspired by NirSoft MultiMonitorTool’s save/restore workflow, with per-profile global hotkeys and system tray residency as first-class features.
Main window — profiles, hotkeys, layout editor, and monitor details
System tray — apply a profile, open the app, or exit from the context menu
- .NET 10 / WPF (Windows desktop UI)
- Windows CCD display API (
QueryDisplayConfig/SetDisplayConfig) - WiX Toolset — MSI + Setup.exe bootstrapper
- Lucide — application and tray icons
- Save the current monitor layout as a profile
- Enabled / disabled, primary monitor, resolution, refresh rate, orientation, position
- Apply, duplicate, delete, and rename profiles
- Assign a global hotkey per profile for instant switching
- System tray residency (apply from the context menu)
- UI localization in 31 languages (follows the system language by default; override in Settings)
- Settings and profiles stored as JSON under
%AppData%\DisplayForge\
- Windows 10 / 11 (x64)
- For the MSI package only: .NET 10 Desktop Runtime. The Setup.exe installs it automatically when missing.
| Item | Details |
|---|---|
| OS | Windows 10 / 11 (x64) |
| Recommended | …-Setup.exe (installs everything you need) |
| Also available | ….msi (app only; see below) |
| Example file names | DisplayForge-0.1.1-win-x64-en-US-Setup.exe, …-ja-JP-Setup.exe |
| Settings location | %AppData%\DisplayForge\ (kept after uninstall) |
Releases include two kinds of installer. They install the same app — pick based on how you want to install:
| File | Who it’s for | What it does |
|---|---|---|
…-Setup.exe (recommended) |
Most people | Installs DisplayForge. If .NET 10 Desktop Runtime is missing, it installs that first automatically. |
….msi |
Advanced / IT use | Installs DisplayForge only. You must already have the Desktop Runtime, or the app will not run. Handy for company deployment or silent install with msiexec. |
Simple rule: if you’re not sure, download Setup.exe.
- Prefer ja-JP or en-US in the file name for the installer wizard language (Japanese or English). The app itself supports 31 UI languages either way.
- Run the installer as administrator when Windows asks.
- If a release is not available yet, you can build from source.
- Start the app (the main window opens by default)
- Optionally minimize to the tray; double-click the tray icon to open the window again
- Create a profile with New from current layout
- Click the hotkey field and press a chord such as
Ctrl+Alt+1 - Change the Windows display layout, then save another profile the same way
- Switch with the hotkey or the tray menu
In a normal launch, closing the window keeps the app in the tray. Use Exit on the tray menu to quit. Prefer tray-only startup via Settings → Start minimized to tray.
Defaults to the Windows display language. Change anytime under Settings → Language. Every installer package includes all of these UI languages.
Note: UI strings (and most installer localizations) were produced with AI assistance. Wording may be imperfect or unnatural in places — feedback and corrections are welcome.
| Code | Language | Code | Language |
|---|---|---|---|
en |
English | ja |
日本語 |
zh-Hans |
简体中文 | zh-Hant |
繁體中文 |
ko |
한국어 | de |
Deutsch |
fr |
Français | es |
Español |
pt-BR |
Português (Brasil) | pt-PT |
Português (Portugal) |
it |
Italiano | nl |
Nederlands |
pl |
Polski | ru |
Русский |
uk |
Українська | tr |
Türkçe |
cs |
Čeština | sv |
Svenska |
da |
Dansk | nb |
Norsk bokmål |
fi |
Suomi | hu |
Magyar |
ro |
Română | el |
Ελληνικά |
vi |
Tiếng Việt | th |
ไทย |
id |
Bahasa Indonesia | ms |
Bahasa Melayu |
hi |
हिन्दी | ar |
العربية |
he |
עברית |
GitHub Releases currently ship en-US and ja-JP Setup.exe (and MSI) packages (installer wizard language only). The app UI language set above is the same in both packages.
| File | Contents |
|---|---|
%AppData%\DisplayForge\profiles.json |
Profile list |
%AppData%\DisplayForge\settings.json |
Language, notifications, hotkey enablement, etc. |
Requirements: Windows 10/11 x64, .NET 10 SDK
dotnet build
dotnet test
dotnet run --project src/DisplayForgeBuild installers locally (Setup.exe + MSI):
.\build-msi.ps1Full build, silent install, CI/release notes: docs/development.md How to contribute: CONTRIBUTING.md
src/DisplayForge WPF UI / tray / hotkeys
src/DisplayForge.Core Display API, profiles, matching
tests/DisplayForge.Core.Tests
installer/DisplayForge.Installer WiX MSI
installer/DisplayForge.Bootstrapper WiX Bundle (Setup.exe)
Display changes use the Windows CCD API (QueryDisplayConfig / SetDisplayConfig).
The primary monitor is treated as the virtual-desktop origin (0,0).
With dotnet run, closing the window also exits the process (so the shell is not left blocked). To keep tray residency while developing:
dotnet run --project src/DisplayForge -- --tray-on-closeTo exit on close even in a normal launch, pass --exit-on-close.
See the open issues and ROADMAP.md for planned features and known issues.
Known limitations:
- Aimed at extended desktop (Extend). Advanced clone-only editing is not supported
- When a monitor is disconnected, that profile entry is skipped (partial apply)
- On some Windows 11 setups
SetDisplayConfigcan be flaky; if apply fails, open Windows Display Settings once and try again - DPI scaling / HDR / window position restore are candidates for future work
Contributions are welcome. Please read CONTRIBUTING.md for the workflow (Conventional Commits, DCO sign-off, PR process) and our Code of Conduct.
Thanks to everyone who has contributed to DisplayForge. This list is updated automatically from git history.
|
dreamingdog0529 |
Repository automation and community files follow container-registry/oss-project-template (adapted for .NET / Windows installers).
| Document | Purpose |
|---|---|
| CONTRIBUTING.md | Develop, test, PRs, DCO, CI/CD, releases |
| SUPPORT.md | How to get help |
| ROADMAP.md | Direction and how to propose work |
| CODE_OF_CONDUCT.md | Community standards |
| SECURITY.md | Private vulnerability reporting |
| CODEOWNERS | Default code review owners |
| CHANGELOG.md | Release history |
| LICENSE | MIT license text |
Distributed under the MIT License. See LICENSE for more information.
MIT © 2026 DisplayForge contributors
- NirSoft MultiMonitorTool — the save/restore workflow that inspired this project
- Lucide (ISC License) — application and tray icons
- App / tray indicator:
monitor-cog(source SVG undersrc/DisplayForge/Assets/lucide/; packaged asAssets/app.ico) - Tray menu:
monitor,check,settings,app-window,log-out(same folder) - Full license text:
src/DisplayForge/Assets/LICENSES/lucide-LICENSE.txt
- App / tray indicator:

