Releases: zac15987/DisplayProfileManager
v1.3.0 - HDR Support, Rotation Control & Enhanced Display Engine
🎉 Release Highlights
This release brings significant improvements to display management with HDR support, screen rotation control, and a completely rewritten display configuration engine for unprecedented reliability in multi-monitor setups. Perfect for users with HDR-capable displays, portrait monitors, or complex multi-monitor configurations.
✨ What's New
🎨 HDR (High Dynamic Range) Support
- Enable/Disable HDR per monitor - Control HDR settings for each display independently
- Automatic HDR capability detection - The application automatically detects which monitors support HDR
- Per-profile HDR configuration - Save different HDR settings for different usage scenarios (gaming, content creation, etc.)
- HDR status preservation - HDR settings are reliably applied when switching profiles
🔄 Screen Rotation Control
- Full orientation support - Configure screen rotation for each monitor (0°, 90°, 180°, 270°)
- Perfect for portrait setups - Easily manage monitors in portrait orientation
- Multi-orientation profiles - Create profiles with different monitor orientations (e.g., one landscape, one portrait)
- Reliable rotation application - Rotation is applied atomically with other display settings
⚙️ Staged Application Mode
- Two-phase profile application - New optional mode that applies complex settings in phases for enhanced stability
- Improved reliability for complex setups - Dramatically reduces failures when switching profiles with HDR, high refresh rates, or multiple displays
- Configurable pause duration - Adjust the delay between phases (1-5000ms) to optimize for your specific hardware
- Smart activation - Only used for multi-monitor profiles when enabled in settings
- User-controlled - Easily toggle on/off in Settings > Display Configuration
🔧 Enhanced Display Configuration Engine
- Complete rewrite using modern Windows APIs - Replaced legacy
ChangeDisplaySettingsExwith atomicSetDisplayConfigAPI - Atomic topology application - All display settings (resolution, refresh rate, position, primary, HDR, rotation, enable/disable) are applied in a single operation
- Drastically improved reliability - Eliminates iterative setting application failures that plagued multi-monitor setups
- Better error handling - More robust detection and recovery from display configuration issues
- Future-proof architecture - Built on modern Windows Display Configuration API for better compatibility with future Windows versions
🔍 Technical Details
Updated Components
- DisplayConfigHelper - Complete rewrite using Windows Display Configuration API (
SetDisplayConfig) - ProfileManager - Enhanced
ApplyProfileAsyncwith staged application support - DisplaySetting - New properties:
IsHdrSupported,IsHdrEnabled,Rotation - SettingsManager - New settings:
UseStagedApplication,StagedApplicationPauseMs - AboutHelper - Updated with v1.3.0 version and new contributor information
Profile Structure Changes
.dpm profile files now include:
isHdrSupported(bool) - Whether the monitor supports HDRisHdrEnabled(bool) - HDR enabled state for the profilerotation(int) - Screen orientation (1=0°, 2=90°, 3=180°, 4=270°)
Backward Compatibility: Profiles created with older versions will load correctly with default values (HDR disabled, 0° rotation).
Settings Configuration
New settings in settings.json:
{
"useStagedApplication": false,
"stagedApplicationPauseMs": 1000
}System Requirements
- Operating System: Windows 7 or later
- .NET Framework: 4.8 or later
- Privileges: Standard user (no admin required)
- Recommended: HDR-capable display for HDR features
Dependencies
No new dependencies added. Application continues to use:
- .NET Framework 4.8
- Newtonsoft.Json 13.0.3
- NLog 6.0.4
- AudioSwitcher.AudioApi 3.0.0/3.0.3
📦 Installation
Available Builds
- Installer (x64) -
DisplayProfileManager-v1.3.0-x64-setup.exe - Installer (x86) -
DisplayProfileManager-v1.3.0-x86-setup.exe - Installer (ARM64) -
DisplayProfileManager-v1.3.0-ARM64-setup.exe - Portable (x64) -
DisplayProfileManager-v1.3.0-x64-portable.zip - Portable (x86) -
DisplayProfileManager-v1.3.0-x86-portable.zip - Portable (ARM64) -
DisplayProfileManager-v1.3.0-ARM64-portable.zip
Upgrading from v1.2.0
- Download and run the appropriate installer for your architecture
- Your existing profiles and settings will be preserved
- Existing profiles will work with default HDR (disabled) and rotation (0°) settings
- Edit profiles in the Profile Editor to configure HDR and rotation for each monitor
📊 Development Statistics
- 10 files changed
- +890 additions / -184 deletions
- Commits:
83abe7f,536c3be,f81955d,baf1130 - Primary contribution by @jarandal via PR #8
🙏 Special Thanks
Feature Implementation
- @jarandal - Implemented the complete HDR support, screen rotation control, Staged Application mode, and rewrote the display configuration engine for enhanced reliability (PR #8)
🐛 Known Issues
None currently identified. Please report any issues at GitHub Issues.
📝 Notes
- HDR Configuration: HDR can only be enabled on monitors that report HDR capability. The Profile Editor will automatically disable the HDR checkbox for non-HDR displays.
- Staged Application: If you experience issues when switching complex multi-monitor profiles, try enabling "Staged Application Mode" in Settings > Display Configuration.
- Performance: Staged Application mode may add a slight delay (default 1 second) when switching profiles, but significantly improves reliability for complex configurations.
- Testing: This release has been extensively tested, but display configurations can vary widely. Please report any issues you encounter.
🔗 Links
- Documentation: README.md
- Developer Docs: CLAUDE.md
- Report Issues: GitHub Issues
- Previous Release: v1.2.0
What's Changed
New Contributors
Full Changelog: v1.2.0...v1.3.0
v1.2.0 - Advanced Multi-Monitor Management & Enhanced Reliability
Display Profile Manager v1.2.0 brings major improvements to multi-monitor management with advanced configuration options, enhanced reliability, and professional logging infrastructure.
🖥️ Multi-Monitor Management
Complete Monitor Control
- Enable/Disable Monitors: Selectively enable or disable individual monitors within each profile
- Primary Display Selection: Choose which monitor should be the primary display for each profile
- Monitor Position Tracking: Automatically save and restore monitor positions in multi-monitor setups
- Monitor Identification Overlay: Visual overlay to help identify physical monitors during configuration
- Profile Duplication: Create new profiles based on existing ones with one click
Smart Profile Editing
- Monitor Capabilities Storage: Profiles now store supported resolutions, DPI scaling values, and refresh rates for each monitor
- Offline Editing: Edit profiles even when monitors are disconnected - capability data is stored for offline access
- Visual Indicators: Disabled monitors are clearly marked with yellow backgrounds and warning labels
- Connected Monitor Validation: Profiles are validated against connected monitors before application
🔒 Enhanced Reliability
EDID-Based Monitor Identification
- Monitors are now tracked using EDID (Extended Display Identification Data) for reliable identification
- Improved handling of monitor connection/disconnection scenarios
- Better stability across display driver updates and system changes
Automatic Safety Features
- Topology Rollback: Automatically reverts to previous working layout if display configuration fails
- Position Management: Untracked monitors are properly positioned to prevent overlapping layouts
- Safety Checks: Enhanced validation prevents invalid configurations and array access errors
📊 Professional Logging
NLog Integration
- Comprehensive logging system replaces basic debug output
- Logs saved to
%AppData%\DisplayProfileManager\Logs\ - Daily log rotation with 30-day retention
- Detailed diagnostics for troubleshooting display issues
- Better support for issue reporting and debugging
⚡ Flexible Auto-Start Options
Dual Auto-Start Modes
- Registry Mode (default): Standard startup, no admin privileges required
- Task Scheduler Mode: Faster application launch, requires one-time admin setup
- Choose the mode that best fits your workflow and security preferences
- Clear documentation about privilege requirements in Settings
🎯 User Experience Improvements
- More informative messages when applying profiles
- Third-party library attribution in Settings window
- Improved DPI positioning accuracy for multi-monitor setups
- Enhanced audio system initialization
- Better error handling and user feedback
- Refreshed UI screenshots in documentation
Installation Notes
Clean Installation Recommended
For users upgrading from v1.1.0 or earlier beta versions:
- Consider deleting
%AppData%\DisplayProfileManagerbefore upgrading for cleanest experience - First run will automatically save your current display settings as a "Default" profile
- Your hotkey preferences and other settings will need to be reconfigured
System Requirements
- Windows: 7 or later (Windows 10/11 recommended)
- .NET Framework: 4.8 or later
- Privileges: Standard user account (admin only required for Task Scheduler auto-start mode setup)
Architecture Support
- x64 (64-bit Intel/AMD)
- x86 (32-bit Intel/AMD)
- ARM64 (ARM-based Windows devices)
What's Included
Installer Versions
- DisplayProfileManager-v1.2.0-x64-Setup.exe: 64-bit installer (recommended for most users)
- DisplayProfileManager-v1.2.0-x86-Setup.exe: 32-bit installer (legacy systems)
- DisplayProfileManager-v1.2.0-arm64-Setup.exe: ARM64 installer (Surface Pro X, etc.)
Portable Versions
- DisplayProfileManager-v1.2.0-x64-Portable.zip: 64-bit portable (no installation required)
- DisplayProfileManager-v1.2.0-x86-Portable.zip: 32-bit portable
- DisplayProfileManager-v1.2.0-ARM64-Portable.zip: ARM64 portable
Technical Details
New Dependencies
- NLog 6.0.4: Professional logging framework
Enhanced Components
- ProfileManager: Monitor enable/disable, primary display, position tracking, capabilities storage
- DisplayHelper: EDID integration, topology rollback, improved positioning
- AutoStartHelper: Dual-mode auto-start (Registry + Task Scheduler)
- ProfileEditWindow: Offline editing, visual indicators, improved scrolling
Code Quality
- Complete migration from Debug.WriteLine to NLog logging
- Removed 5,069 lines of unused/redundant code
- Improved error handling and validation throughout
- Enhanced P/Invoke safety and reliability
Development Statistics
- Commits: 44 commits since v1.1.0
- Files Changed: 40 files
- Code Changes: +3,967 additions / -5,069 deletions
- Beta Testing: 4 beta releases (beta.1 through beta.4)
Beta Release History
This release was thoroughly tested through four beta versions:
- v1.2.0-beta.1 - Multi-monitor management foundation
- v1.2.0-beta.2 - Automatic topology rollback and visual indicators
- v1.2.0-beta.3 - NLog integration and dual auto-start modes
- v1.2.0-beta.4 - Monitor capabilities storage and offline editing
Thank you to all beta testers who provided valuable feedback!
Getting Help
- Documentation: See README.md in the repository
- Bug Reports: GitHub Issues
- Feature Requests: GitHub Issues
- Logs Location:
%AppData%\DisplayProfileManager\Logs\(helpful for troubleshooting)
Previous Releases
- v1.1.0: Global Hotkeys & Audio Device Management
- v1.2.0-beta.4: Latest beta release
- Full Changelog: Complete list of changes since v1.1.0
Special Thanks
- @xtrilla - Reported monitor disable/exclude functionality issues (#4)
- @Alienmario - Reported screen switching problems (#5)
Special thanks to all beta testers and users who provided feedback during development. Your input helped shape this release!
Enjoy the improved multi-monitor management! 🎉
What's Changed
Full Changelog: v1.2.0-beta.4...v1.2.0
v1.2.0-beta.4 - Offline Profile Editing
What's New
🖥️ Offline Profile Editing
- Stored Monitor Capabilities: Profiles now capture each monitor's supported resolutions, DPI scaling values, and refresh rates when the device is detected.
- Backward Compatible: Existing profile files continue to load and populate capability data the next time their monitors are seen.
✏️ Smarter Profile Editor
- Offline Picker Support: The Profile Editor now fills resolution, scaling, and refresh rate pickers from the stored capability data.
- Graceful Fallbacks: When capability data is missing, the editor automatically queries the system to keep legacy profiles editable.
Upgrade from v1.2.0-beta.3
This release focuses on:
- Empowering offline profile editing through stored monitor capabilities.
Installation Notes
- Clean installation recommended for beta testers
- Consider deleting
%AppData%\DisplayProfileManagerfolder before running if upgrading from other versions - First run automatically saves current display settings as "Default" profile
- Standard user privileges sufficient (admin only needed for optional Task Scheduler auto-start setup)
Note: This is a pre-release version. Please report any issues on the GitHub Issues page.
Full Changelog: v1.2.0-beta.3...v1.2.0-beta.4
v1.2.0-beta.3 - Logging, Dual Auto-Start & Enhanced Monitor Identification
What's New
🔧 Enhanced Logging System
- Complete NLog Integration: Replaced all Debug.WriteLine calls with structured NLog logging across the entire codebase
- Comprehensive Diagnostics: Application logs now saved to
%AppData%/DisplayProfileManager/Logs/with daily rotation and 30-day retention - Better Troubleshooting: Detailed logging for display changes, profile operations, and system interactions
🚀 Dual Auto-Start Modes
- Registry Mode (Default): Standard user startup without admin privileges
- Task Scheduler Mode: Optional faster launch (requires admin for initial setup only)
- Flexible Configuration: Choose the auto-start method that best fits your needs
🖥️ Improved Monitor Identification
- EDID-based Identification: More reliable monitor tracking across system changes, restarts, and hardware reconnections
- Enhanced Stability: Better handling of monitor identification when displays are disconnected/reconnected
ℹ️ Transparency & Attribution
- Third-Party Library Credits: Added comprehensive attribution for all open-source libraries in Settings window
- Clear Admin Requirements: Documentation now clarifies admin privileges only needed for Task Scheduler auto-start setup
📊 Better User Feedback
- Detailed Profile Apply Results: Enhanced reporting when applying profiles with more informative success/failure messages
Documentation Improvements
- Expanded README with detailed architecture documentation
- Streamlined CLAUDE.md with clearer development guidelines
- Clarified privilege requirements throughout documentation
Installation Notes
- Clean installation recommended for beta testers
- Consider deleting
%AppData%\DisplayProfileManagerfolder before running if upgrading from beta.2 - First run automatically saves current display settings as "Default" profile
- Standard user privileges sufficient (admin only needed for optional Task Scheduler auto-start setup)
Upgrade from v1.2.0-beta.2
This release builds on beta.2's stability improvements with:
- Enhanced diagnostic capabilities through comprehensive logging
- More flexible startup options
- More reliable monitor tracking
- Better transparency and user feedback
Note: This is a pre-release version. Please report any issues on the GitHub Issues page.
Full Changelog: v1.2.0-beta.2...v1.2.0-beta.3
v1.2.0-beta.2 - Enhanced Display Stability & Monitor Management
📋 Overview
This beta release focuses on improving display configuration stability and handling edge cases in multi-monitor setups. The key enhancement is the introduction of automatic rollback functionality that ensures users never get stuck with broken display configurations.
⚠️ Important Installation Note
For the best experience with this beta release:
- Clean installation recommended: Delete the existing
%AppData%\DisplayProfileManagerfolder before running this version - First run behavior: The application will automatically save your current display settings as a "Default" profile
- Administrator privileges required: The application needs admin rights for DPI scaling changes
✨ New Features
🔄 Automatic Display Topology Rollback
- Automatically reverts to the previous working multi-monitor layout if topology changes fail
- Specifically handles failures when enabling/disabling monitors or changing monitor arrangements
- Shows informative notifications explaining what went wrong and confirming the successful rollback
- Prevents users from being stuck with non-functional monitor configurations
- Captures and preserves the original display topology before making layout changes
- Note: This rollback applies to monitor layout/topology only, not to resolution, refresh rate, scaling, or primary display settings
👁️ Visual Monitor Status Indicators
- Disabled monitors now display with distinct visual styling in the profile details panel:
- Yellow-tinted background for immediate recognition
- "⚠ DISABLED MONITOR" warning label
- Reduced opacity to differentiate from active monitors
- Enabled monitors show with a subtle border for visual consistency
🐛 Bug Fixes
Display Management
- Fixed unspecified monitor handling: Monitors not included in a profile are now properly disabled when applying that profile
- Fixed inactive monitor positioning: Skip inactive monitors during display layout positioning to avoid configuration errors
- Added safety checks: Prevent array access errors with bounds checking for mode info indices
User Interface
- Fixed profile editor scrolling: Removed nested ScrollViewer that was preventing mouse wheel scrolling in the Profile Edit Window
- Improved content accessibility: Users can now smoothly scroll through all profile settings without manually dragging the scrollbar
📖 User Guide
Getting Started with Display Profile Manager
1. Understanding Monitor Management
Important: Manual monitor adding has been intentionally removed to make the program more controllable and simpler. Follow this workflow:
- Connect and enable all monitors you want to use in Windows Display Settings
- Arrange their positions in Windows Display Settings (this app doesn't support layout editing yet)
- Click "Detect Current" in the app to detect all connected/enabled monitors
- Configure the profile by:
- Enabling/disabling specific monitors
- Adjusting resolution, refresh rate, and DPI scaling
- Setting audio devices if needed
2. Creating Your First Profile
- Open the main window
- Create a new profile: Click "Add Profile"
- Capture current setup: Click "Detect Current" to capture your current display configuration
- Configure displays:
- Enable/disable monitors using the checkboxes
- Set resolution and refresh rate for each monitor
- Adjust DPI scaling (100%, 125%, 150%, etc.)
- Choose which monitor should be primary
- Configure audio (optional):
- Select default playback device (speakers, headphones)
- Select default communication device (microphone)
- Check the boxes to apply these settings with the profile
- Set a hotkey (optional): Click in the hotkey field and press your desired key combination
- Save the profile: Give it a descriptive name and click "Save"
3. Switching Between Profiles
Quick Methods:
- System Tray: Right-click tray icon → "Profiles" → Click on any profile name
- Hotkeys: Press the configured hotkey combination for instant switching
- Main Window: Select a profile and click "Apply Profile"
4. Managing Profiles
- Edit: Select a profile → "Edit" to modify settings
- Duplicate: Create a copy of an existing profile for variations
- Delete: Remove profiles you no longer need
- Import/Export: Backup or share profiles using the File menu
5. Settings Configuration
Access via right-click tray icon → "Settings":
- Start with Windows: Enable automatic startup
- Default Profile: Choose which profile to apply on startup
- Theme: Select Light, Dark, or follow system theme
- Minimize to Tray: Keep running in background when closed
Tips for Best Results
- Use descriptive names like "Gaming - 144Hz", "Work - Dual Screen", "Presentation - Single Display"
- Set up hotkeys for frequently used profiles for instant switching
- Create a "Default" profile that matches your most common setup
- Use the duplicate feature to create variations of working profiles
🤝 Contributing
Found a bug or have a feature request? Please report it on our GitHub Issues page.
🙏 Feature Contributors
Thanks to the following community members whose issue reports led to improvements in this release:
- @xtrilla - Reported monitor disable/exclude functionality issues (#4)
- @Alienmario - Reported screen switching problems (#5)
Note: This is a pre-release version. While it includes significant stability improvements, please keep your important display configurations backed up and report any issues you encounter.
Full Changelog: v1.2.0-beta.1...v1.2.0-beta.2
v1.2.0-beta.1 - Multi-Monitor Management & Display Control
⚠️ Important: Clean Installation Required
Due to significant changes in profile structure, please delete your existing configuration before upgrading:
- Exit Display Profile Manager completely
- Delete the folder:
%APPDATA%\DisplayProfileManager - Run v1.2.0-beta.1
This ensures compatibility with the new monitor management features. Your current display settings will be saved as the "Default" profile on first run.
✨ New Features
🖥️ Advanced Multi-Monitor Management
- Monitor Enable/Disable Support - Selectively enable or disable specific monitors within profiles, perfect for switching between single and multi-monitor setups
- Primary Display Management - Set and save which monitor should be the primary display for each profile
- Display Position Tracking - Automatically save and restore monitor positions and arrangements when switching profiles
- Monitor Identification Overlay - Visual overlay system to easily identify monitors during configuration (shows monitor number on each display)
🔄 Enhanced Profile Management
- Profile Duplication - Quickly duplicate existing profiles with all their settings for easy modifications
- Connected Monitor Validation - Automatically checks if required monitors are connected before applying profiles, preventing configuration errors
🔧 Improvements
Display System Enhancements
- Optimized Profile Application Workflow - Streamlined the process of applying display settings for faster profile switching
- Improved DPI Positioning - Uses
SetWindowPosfor accurate multi-monitor DPI positioning, ensuring windows appear correctly on high-DPI displays - Better Refresh Rate Handling - Automatically populates empty refresh rate dropdowns with the current display's refresh rate
- Simplified Display Controls - Cleaner and more intuitive display configuration interface in the profile editor
Audio System Improvements
- Early Audio System Initialization - Audio system now initializes at app startup for faster device switching
- Simplified Device Name Resolution - More reliable audio device name detection and display
Code Architecture
- Removed Legacy Display Code - Cleaned up unused display topology code for better maintainability
- Improved Display Config Retrieval - Now using modern
QueryDisplayConfigAPI for more reliable display information - Profile File Naming - Profile files now use descriptive names instead of GUIDs for easier manual management
🐛 Bug Fixes
- Fixed issue where empty display settings weren't properly initialized from controls
- Fixed profile file naming to use profile name instead of ID for better file organization
- Resolved audio device validation issues during profile loading
- Corrected display settings initialization for new profiles
📦 What's Included
- DisplayProfileManager.exe - Main application executable (requires administrator privileges)
- All necessary dependencies are included in the package
⚠️ Beta Notes
This is a pre-release version intended for testing the new multi-monitor management features. While the core functionality is stable, you may encounter minor issues with complex multi-monitor setups. Please report any bugs or unexpected behavior via the GitHub Issues page.
🔍 Testing Focus Areas
We'd particularly appreciate feedback on:
- Multi-monitor configurations with 3+ displays
- Monitor enable/disable functionality with different monitor combinations
- Display position restoration accuracy
- DPI scaling across monitors with different DPI settings
- Profile duplication with complex configurations
- Monitor identification overlay visibility and accuracy
🛠️ Technical Details
- Platform: Windows 7 or later (Windows 10/11 recommended)
- Framework: .NET Framework 4.8
- UI Framework: WPF (Windows Presentation Foundation)
- Privileges: Administrator rights required for DPI changes and display configuration
- Architecture: MVVM pattern with singleton managers
💡 Known Limitations
- Administrator privileges are required for DPI scaling changes
- Some display changes may require a brief screen flicker
- Monitor enable/disable may not work with all graphics drivers
- Display position changes work best with Windows 10/11
🙏 Acknowledgments
🤝 Feature Contributors
- @xtrilla - Requested the monitor disable/enable feature for selective display control (#4)
- @Alienmario - Reported multi-monitor switching issues and provided valuable feedback for improvements (#5)
- @Catriks - Originally requested audio device switching functionality (#1)
- @anodynos - Suggested global hotkey functionality (#2)
📚 Key Libraries
- AudioSwitcher.AudioApi (v3.0.0) - Audio device management
- Newtonsoft.Json (v13.0.3) - JSON serialization
- Windows Display Configuration APIs - Display management functionality
🤖 Development
Built in collaboration with Claude Code - Anthropic's AI assistant for software development
📝 How to Report Issues
If you encounter any bugs or have suggestions:
- Check the existing issues first
- Create a new issue with:
- Your Windows version
- Number and type of monitors
- Steps to reproduce the issue
- Any error messages
- Your display configuration (resolution, DPI, arrangement)
🚀 What's Next
The next release will focus on:
- Further multi-monitor switching improvements
- Enhanced error handling and recovery
- Performance optimizations for profile switching
- Additional display arrangement options
Thank you for testing Display Profile Manager! Your feedback helps make this tool better for everyone.
Full Changelog: v1.1.0...v1.2.0-beta.1
v1.1.0 - Global Hotkeys & Audio Device Management
🚀 What's New
Display Profile Manager v1.1.0 introduces two highly requested features that transform how you manage your workspace configurations:
🎮 Global Hotkey System
Instantly switch between display profiles without opening the app! Assign custom keyboard shortcuts to each profile for lightning-fast workspace transitions.
- System-wide hotkeys - Work from any application
- Per-profile configuration - Unique shortcuts for each setup
- Conflict detection - Prevents duplicate assignments
- Visual indicators - See assigned hotkeys in the main window and system tray
🔊 Audio Device Management
Complete your workspace setup by automatically switching audio devices along with your display configuration.
- Playback device switching - Speakers, headphones, and more
- Communication device switching - Microphones and input devices
- Bluetooth support - Seamless wireless device handling
- Per-device control - Choose which devices to switch
- Device refresh - Automatic detection of new devices
✨ Improvements
Interface & Usability
- ✅ Resizable windows - All windows now support resizing with proper DPI scaling
- ✅ Enhanced hotkey editor - Intuitive control for capturing key combinations
- ✅ Improved visual feedback - Clear status indicators and conflict warnings
- ✅ Dynamic theme support - Hotkey controls adapt to light/dark themes
Settings & Configuration
- ✅ Cleaner settings structure - Removed redundant configuration options
- ✅ Assembly version tracking - Version now reads directly from assembly
- ✅ Semantic versioning - Support for beta and release tags
- ✅ Better backward compatibility - Seamless migration from v1.0.0
Installation
- ✅ Inno Setup installer - Professional installation experience (optional)
- ✅ Portable versions - Continue to use without installation if preferred
🐛 Bug Fixes
- Fixed Bluetooth device naming inconsistencies
- Resolved cross-device name contamination issues
- Improved hotkey conflict detection during profile editing
- Fixed audio device selection and display problems
- Corrected default device selection behavior
- Enhanced error handling for device enumeration
📦 Downloads
Installer
- DisplayProfileManager-v1.1.0-x64-Setup.exe - 64-bit Windows installer
- DisplayProfileManager-v1.1.0-x86-Setup.exe - 32-bit Windows installer
- DisplayProfileManager-v1.1.0-ARM64-Setup.exe - ARM64 Windows installer
Portable Versions
- DisplayProfileManager-v1.1.0-x64-Portable.zip - 64-bit portable version
- DisplayProfileManager-v1.1.0-x86-Portable.zip - 32-bit portable version
- DisplayProfileManager-v1.1.0-ARM64-Portable.zip - ARM64 portable version
📋 System Requirements
- Operating System: Windows 7 or later
- .NET Framework: 4.8 or later (Download)
- Privileges: Administrator rights required
- Architecture: x64, x86, or ARM64 processor
🔄 Upgrading from v1.0.0
- Settings are preserved - Your profiles and preferences will automatically migrate
- No breaking changes - Full backward compatibility maintained
- New features are optional - Hotkeys and audio switching can be configured as needed
👥 Contributors
Special thanks to our community contributors who made this release possible:
- @Catriks - Feature suggestions and extensive testing
- @Alienmario - Bug reports and valuable feedback
- @anodynos - Global hotkey feature inspiration and testing
📝 Changelog
Added
- Global hotkey system with per-profile configuration
- Audio device management (playback and communication)
- Bluetooth device support
- Resizable windows across the application
- Hotkey editor control
- Visual hotkey indicators
- Inno Setup installer configuration
- AboutHelper with community acknowledgments
Changed
- Version now reads from assembly instead of settings.json
- Improved settings structure and backward compatibility
- Enhanced error handling and device enumeration
- Updated UI with better visual feedback
Removed
- Automatic update checking feature
- Redundant version field in settings.json
Fixed
- Bluetooth device naming issues
- Hotkey conflict detection
- Audio device selection problems
- Default device selection behavior
- Cross-device name contamination
🧪 Beta Testing
This release went through extensive beta testing:
- v1.1.0-beta.1 - Initial audio device switching
- v1.1.0-beta.2 - Global hotkeys and final refinements
Thanks to all beta testers for their valuable feedback!
📚 Documentation
⚡ Quick Start
- Download the appropriate version for your system
- Extract (portable) or Install the application
- Run DisplayProfileManager.exe
- Create profiles for your different display setups
- Assign hotkeys for instant switching
- Configure audio devices if desired
- Switch profiles from main window, the system tray or using hotkeys!
🆚 Version Comparison
| Feature | v1.0.0 | v1.1.0 |
|---|---|---|
| Display Profile Management | ✅ | ✅ |
| System Tray Integration | ✅ | ✅ |
| Multi-Monitor Support | ✅ | ✅ |
| DPI Scaling | ✅ | ✅ |
| Theme Support | ✅ | ✅ |
| Global Hotkeys | ❌ | ✅ |
| Audio Device Switching | ❌ | ✅ |
| Resizable Windows | ❌ | ✅ |
Full Changelog: v1.0.0...v1.1.0
Questions or Issues? Please open an issue on GitHub.
v1.1.0-beta.2 - Global Hotkeys & Settings Cleanup
🔥 Pre-release with global hotkey system and settings improvements
This beta release introduces system-wide hotkey support for instant profile switching and includes important settings cleanup improvements. Audio device switching functionality is still in beta.
✨ New Features
Global Hotkey System
- System-wide Profile Switching: Instantly switch between display profiles from anywhere using custom hotkey combinations
- Per-Profile Hotkeys: Configure unique hotkey combinations for each profile (e.g., Ctrl+Shift+1, Ctrl+Shift+2)
- Hotkey Status Display: Visual indicators in the main window show which profiles have hotkeys enabled/disabled
- Conflict Detection: Graceful handling of hotkey registration conflicts with proper fallback
Enhanced Settings Management
- Settings Cleanup: Removed redundant auto-update and version tracking from settings.json
- Assembly Version Integration: Version information now properly sourced from AssemblyInfo.cs
- Backward Compatibility: Existing settings files automatically migrate without issues
🔧 Improvements
Hotkey Integration
- HotkeyEditorControl: New WPF control for capturing and editing hotkey combinations in the Profile Editor
- Thread Safety: All hotkey operations properly dispatched to UI thread with cleanup on disposal
- KeyConverter Mapping: Seamless conversion between WPF Key enums and Windows virtual key codes
Settings Architecture
- Cleaner Data Model: Removed unused properties from settings.json for better maintenance
- Assembly Version Fallback: Robust version detection with proper fallback chain (InformationalVersion → FileVersion → AssemblyVersion)
- Settings UI Updates: Hotkey status display integrated into Settings window
Window Behavior
- Resizable Windows: All application windows now support proper resizing across different DPI settings
📦 What's Included
- 64-bit portable version (x64)
- 32-bit portable version (x86)
- ARM64 portable version (ARM64)
⚠️ Beta Notes
- Pre-release version for testing global hotkey and audio switching functionality
- Please report issues with:
- Global hotkey registration/conflicts
- Hotkey combinations not working
- Audio device switching reliability
- Audio device name accuracy
- Bluetooth device compatibility
- Settings migration issues
🔍 Testing Focus Areas
- Hotkey Registration: Test various hotkey combinations across different applications
- Conflict Handling: Try hotkeys that might conflict with existing system/app shortcuts
- Audio Device Switching: Verify audio switching works reliably across different device types
- Bluetooth Devices: Test audio switching with Bluetooth headphones/speakers
- Settings Migration: Upgrade from beta.1 to verify settings properly migrate
- Cross-Application: Test hotkeys work when other applications have focus
🛠️ Technical Details
- .NET Framework 4.8 and WPF
- AudioSwitcher.AudioApi 3.0.0 for audio device management
- GlobalHotkeyHelper: P/Invoke wrapper for RegisterHotKey/UnregisterHotKey APIs
- Per-monitor DPI awareness V2
- Requires administrator privileges for hotkey registration
- Windows Vista+ compatible
🙏 Acknowledgments
Community Features
- @Catriks for audio device switching suggestion (Issue #1)
- @Alienmario for AudioSwitcher recommendation and design feedback
- @anodynos for suggesting global hotkey functionality (Issue #2)
Key Libraries
- AudioSwitcher.AudioApi - Audio device management
- Newtonsoft.Json - JSON serialization
Development
- Claude Code - Development assistance and code generation
Note: This is a beta release. Both global hotkeys and audio switching are new features that should be tested thoroughly before production use. For critical environments, consider using stable v1.0.0.
Full Changelog: v1.1.0-beta.1...v1.1.0-beta.2
v1.1.0-beta.1 - Audio Device Switching Preview
🎧 Pre-release with audio device management capabilities
This beta release introduces audio device switching functionality, allowing you to save and restore audio configurations along with your display profiles.
✨ New Features
Audio Device Management (#1)
- Playback Device Switching: Save and restore default audio output devices with profiles
- Communication Device Switching: Manage default communication devices (microphones, headsets)
- Per-Device Control: Choose which audio settings to apply on a per-profile basis
- Device Detection: Automatic enumeration of all available audio devices
- Bluetooth Support: Full support for Bluetooth audio devices
Enhanced Version Display
- Semantic versioning with beta/RC tag support
- Version tags now visible in Settings window
🔧 Improvements
- AudioHelper Integration: New helper class for robust audio device management via AudioSwitcher API
- Profile Enhancement: Profiles now store audio device configurations alongside display settings
- Settings UI: Updated settings window to display informational version strings
- Device Refresh: Audio controller re-initialization for dynamic device updates
📦 What's Included
- 64-bit portable version (x64)
- 32-bit portable version (x86)
- ARM64 portable version
⚠️ Beta Notes
This is a pre-release version for testing the new audio switching features. Please report any issues you encounter:
- Audio devices not switching as expected
- Missing or incorrect device names
- Bluetooth device compatibility issues
🔍 Testing Focus Areas
- Profile Creation: Save profiles with different audio device configurations
- Device Switching: Verify audio devices switch correctly when applying profiles
- Bluetooth Devices: Test with Bluetooth headphones/speakers
- Communication Devices: Test microphone/headset switching
- Mixed Profiles: Test profiles with some audio settings disabled
🛠️ Technical Details
- Built with .NET Framework 4.8 and WPF
- AudioSwitcher.AudioApi 3.0.0 for audio management
- Per-monitor DPI awareness (V2)
- Requires administrator privileges
- Windows Vista+ compatible
🙏 Acknowledgments
- Community feedback on audio device management needs
- AudioSwitcher library for Core Audio API wrapper
- Contributors testing beta features
- Built with Claude Code assistance
Special Thanks
- @Catriks for suggesting the audio device switching feature (#1)
- @Alienmario for valuable feedback
Note: This is a beta release. For production use, please use the stable v1.0.0 release.
Full Changelog: v1.0.0...v1.1.0-beta.1
v1.0.0 - Initial Release
Release Notes
🎉 Initial Release of Display Profile Manager
A lightweight Windows desktop application for managing display profiles with quick switching from the system
tray.
✨ Features
- Profile Management: Save and switch between multiple display configurations (resolution, refresh rate, DPI)
- System Tray Integration: Quick profile switching from the system tray with dynamic context menu
- Multi-Monitor Support: Configure settings for each connected monitor independently
- Refresh Rate Selection: Choose specific refresh rates for each resolution
- DPI Scaling: Adjust system-wide DPI scaling per profile
- Theme Support: Light and dark theme with automatic switching
- Windows 11 Snap Layouts: Full support for Windows 11 window snapping
- Auto-start: Option to start with Windows and minimize to system tray
- Hotkey Support: Print Screen detection for quick profile switching
- Single Instance: Prevents duplicate application launches
🛠️ Technical Details
- Built with .NET Framework 4.8 and WPF
- Per-monitor DPI awareness (V2)
- Requires administrator privileges for display configuration
- Windows Vista and later supported
📦 Available Downloads
- DisplayProfileManager-v1.0.0-x64-Portable - 64-bit portable version
- DisplayProfileManager-v1.0.0-x86-Portable - 32-bit portable version
- DisplayProfileManager-v1.0.0-ARM64-Portable - ARM64 portable version
🙏 Acknowledgments
- DPI scaling implementation based on community contributions
- Built with Claude Code assistance