Add 650+ line GUIDE.md covering installation, configuration, and usage of Monitor Control application. Includes step-by-step instructions for adjusting brightness/contrast, switching input sources, managing power states, configuring ports, troubleshooting DDC/CI issues, and technical notes on rate limiting. Update README.md with improved feature descriptions and link to new user guide.
20 KiB
Monitor Control - User Guide
A Windows application for controlling DDC/CI-enabled monitors. Adjust brightness, contrast, input sources, and power settings through a simple system tray interface or WPF management window.
Table of Contents
- Features
- System Requirements
- Installation
- Getting Started
- Common Workflows
- Configuration
- Troubleshooting
- Best Practices
- Multi-Language Support
- Technical Notes
Features
- Brightness & Contrast Control: Adjust monitor brightness and contrast via sliders (VCP codes 10 and 12)
- Input Source Switching: Switch between HDMI, DisplayPort, DVI, VGA, and other inputs (VCP code 60)
- Power Management: Turn monitors on/off or put them to sleep (VCP code D6)
- Quick-Switch Toolbar: Create custom buttons for frequently-used input sources
- Port Configuration: Rename ports, hide unused inputs, and detect undiscovered ports
- System Tray Integration: Lightweight tray icon with popup control panel
- Multi-Monitor Support: Manage all DDC/CI-enabled monitors from one interface
- 9-Language Localization: English, Spanish, French, German, Chinese, Japanese, Portuguese, Italian, Hindi
- Automatic Updates: Checks for new releases from git.marketally.com
System Requirements
- Operating System: Windows Vista or later (tested on Windows 11)
- .NET Runtime: .NET 9.0 (included in installer)
- Hardware: DDC/CI-enabled monitor(s) connected via digital cable (HDMI, DisplayPort, DVI)
- Cable Type: VGA cables often do not support DDC/CI; use digital cables for best results
- Graphics Driver: Up-to-date driver recommended for reliable DDC/CI communication
Note: Some monitors do not support all VCP features. Power control and input switching support varies by manufacturer.
Installation
Option 1: Installer (Recommended)
- Download the latest
.exeinstaller from git.marketally.com - Run the installer and follow the prompts
- The application will launch automatically and add a tray icon
- Monitor Control will start with Windows by default
Option 2: Build from Source
-
Clone the repository:
git clone https://git.marketally.com/misc/ControlMyMonitorManagement.git cd ControlMyMonitorManagement -
Open
ControlMyMonitorManagement.slnin Visual Studio 2022 or later -
Restore NuGet packages:
dotnet restore -
Build the
MonitorControlproject:dotnet build MonitorControl/MonitorControl.csproj -c Release -
Run the executable:
MonitorControl/bin/Release/net9.0-windows/MonitorControl.exe
Required Files: The application depends on ControlMyMonitor.exe (by NirSoft) which must be in the same directory as the main executable. This file is included in the repository under Library/Resource/.
Getting Started
First Launch
- After installation, look for the monitor icon in your system tray (near the clock)
- Click the tray icon to open the control panel
- The application will scan for DDC/CI monitors (takes 2-5 seconds)
- Your monitors will appear with available controls
Understanding the Interface
The control panel displays one section per detected monitor:
- Monitor Name: Shown at the top of each section (e.g., "22EA53")
- Brightness Slider: 0-100% range
- Contrast Slider: 0-100% range
- Input Dropdown: Lists available input sources (HDMI, DisplayPort, etc.)
- Power Button: Shows current state (PowerOn, Sleep, PowerOff)
- Config Button: Opens port configuration window
If No Monitors Appear
If you see "No DDC/CI monitors detected":
- Verify your monitor supports DDC/CI (check monitor OSD settings for "DDC/CI Enable")
- Use a digital cable (HDMI, DisplayPort, DVI) — VGA often lacks DDC/CI support
- Update your graphics card driver
- Try unplugging and reconnecting the monitor
- If using a KVM switch, try connecting directly to the computer
- Click "Show Log" (appears after 3 seconds) to view debug information
Common Workflows
Adjusting Monitor Settings
Brightness:
- Click the tray icon to open the control panel
- Find the "Brightness" slider for your monitor
- Drag the slider to adjust (0-100%)
- Release the mouse button to apply the change
- The monitor will update within 1-2 seconds
Contrast:
- Follow the same steps as brightness
- Use the "Contrast" slider instead
Tips:
- Adjustments are applied when you release the mouse button, not while dragging
- If the monitor doesn't respond, wait 3-5 seconds and try again
- After waking from sleep, wait 8 seconds before adjusting settings (monitors need time to initialize)
Switching Input Sources
Manual Switching:
- Open the control panel
- Find the "Input" dropdown for your monitor
- Click the dropdown to see available sources:
- DisplayPort-1, DisplayPort-2
- HDMI-1, HDMI-2
- DVI-1, DVI-2
- VGA-1, VGA-2
- And others depending on your monitor
- Select the desired input
- The monitor will switch within 2-3 seconds
Example: Switch from HDMI to DisplayPort
- Current input shows "HDMI-1"
- Click the dropdown
- Select "DisplayPort-1"
- Monitor switches to DisplayPort input
If an Input Doesn't Appear:
Some monitors don't report all available inputs via DDC/CI. See Detecting Additional Ports below.
Managing Power States
Turn Off Monitor:
- Click the Power button (shows "PowerOn")
- Monitor enters sleep/standby mode
- Button updates to "Sleep" or "PowerOff"
Turn On Monitor:
- Click the Power button (shows "Sleep" or "PowerOff")
- Monitor wakes up
- Button updates to "PowerOn"
Notes:
- Some monitors don't support power control via DDC/CI (button will show "Power Unsupported")
- Power state detection varies by monitor firmware
- Turning off via DDC/CI is not the same as pressing the physical power button
Quick-Switch Toolbar
The quick-switch toolbar provides one-click buttons for frequently-used input sources.
Setup:
- Click the Config button next to a monitor name
- For each input port you want in the toolbar:
- Check "Show in quick-switch toolbar"
- Optionally set a custom label (e.g., "Gaming PC", "Laptop")
- Click Save
- The toolbar appears at the top of the control panel
Usage:
- Open the control panel
- Click any quick-switch button to instantly change input
- The corresponding dropdown updates automatically
Example Configuration:
Monitor: Dell U2720Q
- Port: HDMI-1 → Label: "Work Laptop" → Quick-switch: ✓
- Port: DisplayPort-1 → Label: "Gaming PC" → Quick-switch: ✓
- Port: HDMI-2 → Hidden (unused)
Result: Two buttons appear: "Work Laptop" and "Gaming PC"
Configuration
Customizing Port Labels
By default, ports use generic names like "HDMI-1" or "DisplayPort-1". You can rename them:
- Click Config next to the monitor name
- Find the port you want to rename
- Enter a custom label (e.g., "Xbox", "Work PC", "MacBook")
- Click Save
- The new label appears in the Input dropdown and quick-switch toolbar
Example:
| Port | Default Name | Custom Label |
|---|---|---|
| VCP Value 17 | HDMI-1 | Gaming PC |
| VCP Value 15 | DisplayPort-1 | Work Laptop |
| VCP Value 18 | HDMI-2 | Streaming PC |
Hiding Unused Ports
If your monitor reports inputs you don't use, you can hide them:
- Click Config
- Check the "Hide" checkbox next to unused ports
- Click Save
- Hidden ports won't appear in the Input dropdown
Important: The currently active input is never hidden, even if marked as hidden. This prevents confusion about which input is selected.
Detecting Additional Ports
Some monitors don't report all available inputs via DDC/CI. The port detection feature probes for undiscovered inputs.
How It Works:
- Click Config
- Click Detect
- Read the warning dialog carefully
- Click Yes to proceed
- The application will:
- Save your current input
- Try switching to common ports (DisplayPort-1, DisplayPort-2, HDMI-1, HDMI-2)
- Wait 3 seconds per port to check if the switch succeeded
- Restore your original input
- Any newly discovered ports are added to the configuration
Example Output:
Detected 2 new port(s):
• DisplayPort-1
• HDMI-2
Warnings:
- Your screen may go black briefly during each probe
- The process takes 10-20 seconds for 4 ports
- Don't run detection repeatedly in a short time (can stress monitor scaler)
- Click Cancel anytime to stop detection
- Detection is safe for most monitors but use sparingly
When to Use Detection:
- Your monitor has a port that doesn't appear in the dropdown
- You know the monitor supports an input but it's not listed
- After connecting a new cable type
When NOT to Use Detection:
- All your ports already appear correctly
- You just want to rename existing ports (use custom labels instead)
- Your monitor is behaving strangely (wait for it to stabilize first)
Resetting Configuration
To restore default settings:
- Click Config
- Click Reset
- All custom labels are cleared
- All ports are unhidden
- Quick-switch toolbar is cleared
- Discovered ports are removed
Troubleshooting
Monitor Not Detected
Symptoms: "No DDC/CI monitors detected" message
Solutions:
-
Enable DDC/CI in Monitor OSD:
- Press the monitor's menu button
- Look for "DDC/CI" or "External Control" setting
- Set to "On" or "Enable"
-
Check Cable Type:
- VGA cables often lack DDC/CI support
- Use HDMI, DisplayPort, or DVI instead
- Try a different cable if available
-
Update Graphics Driver:
- Visit your GPU manufacturer's website (NVIDIA, AMD, Intel)
- Download the latest driver
- Restart after installation
-
Direct Connection:
- If using a KVM switch, try connecting directly to the PC
- Some KVM switches block DDC/CI signals
-
Restart Monitor:
- Unplug monitor power cable
- Wait 10 seconds
- Plug back in and power on
Controls Not Responding
Symptoms: Sliders move but monitor doesn't change
Solutions:
-
Wait After Sleep/Resume:
- After waking PC from sleep, wait 8 seconds before adjusting
- Monitor scalers need time to initialize DDC/CI
-
Check Error Codes:
- Click "Show Log" button (appears after 3 seconds of loading)
- Look for error codes like
0xC0262582or0xC0262583 - These indicate DDC/CI communication failure
-
Reduce Command Frequency:
- Don't drag sliders rapidly
- Wait 1-2 seconds between adjustments
- The application enforces 50ms minimum spacing between commands
-
Monitor Timeout Cooldown:
- If a command times out, the monitor is backed off for 3 seconds
- Wait and try again
- Persistent timeouts indicate hardware/firmware issue
-
Firmware Update:
- Check monitor manufacturer's website for firmware updates
- Some bugs are fixed in newer firmware
Input Switching Fails
Symptoms: Input dropdown changes but monitor doesn't switch
Possible Causes:
-
No Signal on Target Input:
- The monitor may refuse to switch if no device is connected to that input
- Connect a device to the target input first
-
Monitor Doesn't Support DDC/CI Input Switching:
- Some monitors allow brightness/contrast control but not input switching
- Use the monitor's physical buttons instead
-
Scaler Busy:
- If you just switched inputs manually, wait 5 seconds before using DDC/CI
- Monitor scaler may be locked during manual input changes
Power Control Doesn't Work
Symptoms: Power button shows "Power Unsupported" or doesn't respond
Explanation:
- Power control (VCP code D6) is optional in the DDC/CI spec
- Many monitors don't implement it or implement it incorrectly
- This is a monitor firmware limitation, not a software bug
Workaround:
- Use the monitor's physical power button
- Use Windows display settings to turn off displays
- Some monitors support power control only in specific modes (check OSD settings)
Application Crashes or Hangs
Symptoms: Window freezes, doesn't respond, or closes unexpectedly
Solutions:
-
Check Debug Log:
- Click "Show Log" button
- Click "Open Log File" to view full log
- Look for exceptions or error messages
- Copy log when reporting issues
-
Restart Application:
- Right-click tray icon → Exit
- Launch again from Start Menu
-
Reinstall:
- Uninstall via Windows Settings → Apps
- Download latest version
- Reinstall
-
Report Issue:
- Copy debug log
- Note your monitor model and connection type
- Report at git.marketally.com/misc/ControlMyMonitorManagement/issues
Error Code Reference
| Error Code | Meaning | Solution |
|---|---|---|
| 0xC0262582 | DDC/CI device not found | Enable DDC/CI in monitor OSD |
| 0xC0262583 | DDC/CI communication timeout | Update graphics driver, try different cable |
| Exit Code -1 | Command timeout (5 seconds) | Wait for cooldown, check monitor health |
Best Practices
DDC/CI Command Spacing
- Don't spam commands: The application enforces 50ms minimum spacing, but monitors appreciate longer gaps
- Wait after sleep: Always wait 8 seconds after system resume before sending commands
- One adjustment at a time: Don't drag multiple sliders simultaneously
Post-Sleep Behavior
When your PC wakes from sleep:
- Monitor scalers need 5-8 seconds to fully initialize
- The application activates an 8-second grace period automatically
- Commands sent during this period are delayed until it expires
- This prevents scaler lockout and command failures
KVM Switch Users
If you use a KVM switch:
- DDC/CI may not work through the KVM (depends on model)
- Try connecting one monitor directly to test
- Some KVMs have "DDC/CI passthrough" settings — enable if available
Multiple Monitors
- The application manages all monitors independently
- Each monitor has its own command queue and rate limiting
- Switching inputs on multiple monitors simultaneously is safe
- Configuration is saved per monitor (by serial number)
Firmware Quirks
Different monitor brands have different DDC/CI implementations:
- Dell: Generally excellent DDC/CI support
- LG: Good support, some models have slow response times
- Samsung: Variable support, some models don't report current input correctly
- ASUS: Usually good, gaming monitors sometimes have limited VCP codes
- BenQ: Mixed support, check DDC/CI setting in OSD
If your monitor doesn't report its current input correctly, the application will still attempt to add it to the list when detected.
Multi-Language Support
The application automatically detects your Windows language and uses the best matching translation.
Supported Languages:
- English (en)
- Spanish (es)
- French (fr)
- German (de)
- Chinese (zh)
- Japanese (ja)
- Portuguese (pt)
- Italian (it)
- Hindi (hi)
Changing Language:
The application uses Windows system language. To change:
- Open Windows Settings → Time & Language → Language
- Add or set preferred language
- Restart Monitor Control
Fallback: If your language isn't supported, the application defaults to English.
Technical Notes
DDC/CI Protocol
Monitor Control uses the DDC/CI (Display Data Channel / Command Interface) protocol to communicate with monitors over the video cable. This is a standardized protocol (VESA DDC/CI 1.1) supported by most modern monitors.
VCP Codes Used:
| VCP Code | Feature | Read/Write |
|---|---|---|
| 10 | Brightness | Read/Write |
| 12 | Contrast | Read/Write |
| 60 | Input Source | Read/Write |
| D6 | Power Mode | Read/Write |
ControlMyMonitor.exe
This application wraps ControlMyMonitor by NirSoft (freeware). The ControlMyMonitor.exe binary is included in the Library/Resource/ folder and must be present for the application to function.
License: ControlMyMonitor is freeware by Nir Sofer. See Library/Resource/readme.txt for details.
Configuration Storage
Monitor configurations are stored in JSON format at:
%APPDATA%\MonitorControl\config.json
Structure:
{
"Monitors": [
{
"SerialNumber": "ABC123",
"MonitorName": "Dell U2720Q",
"Ports": [
{
"VcpValue": 17,
"DefaultName": "HDMI-1",
"CustomLabel": "Gaming PC",
"IsHidden": false,
"ShowInQuickSwitch": true
}
]
}
]
}
You can manually edit this file if needed (close the application first).
Debug Logging
Debug logs are written to:
%TEMP%\CMM\debug.log
To view logs:
- Click "Show Log" button in the control panel (appears after 3 seconds of loading)
- Click "Open Log File" to view in Explorer
- Click "Copy to Clipboard" to paste into bug reports
Logs include:
- Monitor scan results
- VCP command requests and responses
- Error codes and timeout events
- System resume events
Update Mechanism
The application checks for updates from:
https://git.marketally.com/api/v1/repos/misc/ControlMyMonitorManagement/releases/latest
Update checks occur:
- On first launch
- Once per hour while the application is running
- When you click the tray icon (if more than 1 hour since last check)
If an update is available:
- A banner appears at the top of the control panel
- A balloon notification appears in the system tray
- Clicking either opens the download page in your browser
Updates are not automatic — you must download and run the installer manually.
Rate Limiting and Throttling
To protect monitor scalers from command overload:
- Per-Monitor Command Spacing: Minimum 50ms between commands to the same monitor
- Post-Resume Grace Period: 8-second delay after system wake
- Timeout Cooldown: 3-second backoff after a command timeout
- Global DDC Lock: Prevents parallel commands from overwhelming the DDC/CI bus
These limits are enforced automatically and cannot be disabled.
Tips
- Keyboard Shortcuts: None currently implemented (tray-only interface)
- Startup Behavior: Application starts minimized to tray by default
- Window Position: Control panel appears near the system tray (bottom-right)
- Auto-Hide: Control panel closes when it loses focus (click elsewhere)
- Config Persistence: All settings survive application restart
- Monitor Hotplug: Disconnect/reconnect monitors are detected on next tray icon click
Credits
- Original Project: ControlMyMonitorManagement by DangWang
- Enhancements: Brightness/contrast controls, input switching, multi-language support, quick-switch toolbar by David H. Friedel Jr (MarketAlly)
- DDC/CI Tool: ControlMyMonitor by Nir Sofer (NirSoft)
License
- New Contributions: MIT License (see LICENSE file)
- Original Code: No explicit license provided by DangWang
- ControlMyMonitor.exe: Freeware by NirSoft (no commercial use, no modification)
For issues, feature requests, or contributions, visit: