A lightweight Windows desktop application for managing display profiles with quick switching from the system tray. Perfect for users who frequently change display settings for different tasks or setups.
- π₯οΈ Multiple Display Profiles - Save and manage unlimited display configurations
- π Quick Profile Switching - Change profiles instantly from the system tray
- π Resolution & Refresh Rate Control - Adjust display settings per monitor
- π DPI Scaling Management - Control Windows DPI scaling for each profile
- π Auto-start with Windows - Dual modes: Registry (no admin) or Task Scheduler (faster, requires admin setup)
- π¨ Modern UI with Theme Support - Light, dark or system themes
- πΎ Profile Import/Export - Backup your configurations
- πΌοΈ Per-Monitor Configuration - Different settings for multi-monitor setups
- π Audio Device Switching - Automatically switch default playback and recording devices with profiles
- π System Tray Profile Switching - Instantly switch display profiles directly from the system tray
- β‘ Global Hotkeys - Assign keyboard shortcuts to instantly switch between profiles
- π― Monitor Enable/Disable - Selectively disable or enable monitors within profiles
- π Display Position Tracking - Save and restore monitor positions and arrangements
- π₯οΈ Primary Display Management - Control which monitor is set as primary
- π Profile Duplication - Quickly duplicate existing profiles for easy modifications
- π Monitor Identification Overlay - Visual overlay to identify monitors during configuration
- π¨ HDR Support - Enable/disable High Dynamic Range for HDR-capable displays
- π Screen Rotation Control - Configure screen orientation (0Β°, 90Β°, 180Β°, 270Β°) per monitor
- βοΈ Staged Application Mode - Optional two-phase settings application for enhanced stability on complex multi-monitor setups
Manage all your display profiles in one place
Configure resolution, refresh rate, HDR, rotation, DPI settings for each monitor, hotkey, and audio device preferences
Quick access to switch profiles directly from the system tray
Clean light theme for bright environments
- Operating System: Windows 7 or later
- .NET Framework: 4.8 or later (Download)
- Privileges: No administrator rights required for normal operation. Admin needed only for Quick Launch auto-start mode setup.
- Download the latest release from the Releases page
- Run
DisplayProfileManager.exe - The application will start in your system tray
- On first launch, your current display settings are saved as the "Default" profile
- Right-click the system tray icon and select "Manage Profiles"
- Click "Add New Profile"
- Configure your desired resolution, refresh rate, HDR, rotation, and DPI settings for each monitor
- Optionally select default playback and recording audio devices for the profile
- Choose which audio devices to apply (playback, recording, or both) using the checkboxes
- Click "Save" to store the profile
- Quick Switch: Right-click the system tray icon and select a profile from the list
- Auto-switch: Set a default profile to apply on Windows startup
- Right-click the system tray icon and select "Settings"
- Configure auto-start behavior:
- Registry Mode: No administrator privileges required, standard startup
- Task Scheduler Mode: Requires admin for initial setup, provides faster launch times
- Choose your default profile to apply on Windows startup
- Toggle between light, dark or system themes
- Configure advanced display settings:
- Staged Application Mode: Enable two-phase profile application for complex multi-monitor setups (improves stability)
- Application Pause Duration: Adjust the delay between phases (1-5000ms)
- Visual Studio 2019 or later
- .NET Framework 4.8 SDK
- Windows SDK
# Clone the repository
git clone https://github.com/zac15987/DisplayProfileManager.git
cd DisplayProfileManager
# Restore NuGet packages
nuget restore
# Build the solution
msbuild DisplayProfileManager.sln /p:Configuration=Release
# Run the application
start bin\Release\DisplayProfileManager.exeDisplayProfileManager/
βββ src/
β βββ Core/ # Business logic and profile management
β β βββ Profile.cs
β β βββ ProfileManager.cs (thread-safe singleton)
β β βββ SettingsManager.cs (thread-safe singleton)
β β βββ HotkeyConfig.cs
β βββ Helpers/ # Windows API wrappers and utilities
β β βββ DisplayHelper.cs
β β βββ DisplayConfigHelper.cs
β β βββ DpiHelper.cs
β β βββ AudioHelper.cs
β β βββ AutoStartHelper.cs
β β βββ GlobalHotkeyHelper.cs
β β βββ ThemeHelper.cs
β β βββ LoggerHelper.cs
β β βββ KeyConverter.cs
β βββ UI/ # WPF views and view models
β βββ Controls/ # Custom WPF controls
β βββ Converters/ # Value converters
β βββ Themes/ # Light/Dark theme resources
β βββ ViewModels/ # MVVM view models
β βββ Windows/ # Application windows
β βββ TrayIcon.cs
βββ Properties/ # Assembly information and resources
βββ docs/ # Documentation and samples
Core Patterns
- MVVM: ViewModels for UI state management
- Singletons: Thread-safe ProfileManager and SettingsManager for global state
- Async/Await: All file I/O operations use asynchronous patterns
- P/Invoke: Windows Display/DPI/Audio APIs accessed via Helper classes
UI Framework
- WPF (.NET Framework 4.8)
- Theme support (Light, Dark, System) via ResourceDictionary
Storage
- Profiles: Individual
.dpmfiles in%AppData%\DisplayProfileManager\Profiles\(JSON format) - Settings:
%AppData%\DisplayProfileManager\settings.json(JSON format) - Logs:
%AppData%\DisplayProfileManager\Logs\(NLog with daily rotation, 30-day retention)
APIs & Libraries
- Display Management: Windows Display Configuration APIs (SetDisplayConfig) via P/Invoke for atomic topology changes
- Audio Management: AudioSwitcher.AudioApi for device control
- Logging: NLog for structured logging with automatic daily file rotation
- Serialization: Newtonsoft.Json for profile and settings persistence
All application data is stored in the user's AppData directory to support standard user privileges:
Profile Files
- Location:
%AppData%\DisplayProfileManager\Profiles\ - Format: Individual
.dpmfiles (JSON) - Each profile is stored as a separate file for easy backup and portability
- Example:
Gaming.dpm,Work.dpm
Settings File
- Location:
%AppData%\DisplayProfileManager\settings.json - Contains: Theme preferences, auto-start configuration, default profile selection
Log Files
- Location:
%AppData%\DisplayProfileManager\Logs\ - Format:
DisplayProfileManager-YYYY-MM-DD.log - Rotation: Daily with 30-day retention
- Useful for troubleshooting display configuration issues
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Use the Issues page to report bugs
- Include your Windows version and .NET Framework version
- Provide steps to reproduce the issue
- Attach relevant log files if available
This project is licensed under the MIT License - see the LICENSE file for details.
- NLog (v6.0.4, BSD-3-Clause) - Advanced logging framework for .NET with structured logging support
- Newtonsoft.Json - JSON serialization
- AudioSwitcher.AudioApi (v3.0.0) - Audio device management framework
- AudioSwitcher.AudioApi.CoreAudio (v3.0.3) - Windows Core Audio API implementation
- Windows Display Configuration APIs - Display management functionality
- windows-DPI-scaling-sample - Provided the foundation for DPI scaling functionality. The original C++ implementation was translated to C# and forms the core of our DpiHelper.cs, enabling reliable system-wide DPI changes. Sample code documentation preserved in docs/sample-code/
- Claude Code - Built in Collaboration with Claude Code. Anthropic's AI assistant helped architect, implement, and refine core features throughout the development process.
For detailed license information about third-party dependencies, see THIRD-PARTY-LICENSES.md.
- @Catriks - Requested audio device switching functionality (#1)
- @Alienmario - Recommended AudioSwitcher.AudioApi library, suggested per-device "Don't change" options (#1), and reported multi-monitor switching issues (#5)
- @anodynos - Suggested global hotkey functionality for quick profile switching (#2)
- @xtrilla - Requested monitor disable/enable feature for selective display control (#4)
- @jarandal - Implemented HDR support, screen rotation control, and Staged Application mode with enhanced display configuration engine (#8)
- The open-source community for inspiration and support
Note: This application runs as a standard user. Administrator privileges are only required when setting up Quick Launch mode for auto-start (uses Windows Task Scheduler).




