# 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](#features) - [System Requirements](#system-requirements) - [Installation](#installation) - [Getting Started](#getting-started) - [Common Workflows](#common-workflows) - [Adjusting Monitor Settings](#adjusting-monitor-settings) - [Switching Input Sources](#switching-input-sources) - [Managing Power States](#managing-power-states) - [Quick-Switch Toolbar](#quick-switch-toolbar) - [Configuration](#configuration) - [Customizing Port Labels](#customizing-port-labels) - [Hiding Unused Ports](#hiding-unused-ports) - [Detecting Additional Ports](#detecting-additional-ports) - [Troubleshooting](#troubleshooting) - [Best Practices](#best-practices) - [Multi-Language Support](#multi-language-support) - [Technical Notes](#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) 1. Download the latest `.exe` installer from [git.marketally.com](https://git.marketally.com/misc/ControlMyMonitorManagement/releases) 2. Run the installer and follow the prompts 3. The application will launch automatically and add a tray icon 4. Monitor Control will start with Windows by default ### Option 2: Build from Source 1. Clone the repository: ```bash git clone https://git.marketally.com/misc/ControlMyMonitorManagement.git cd ControlMyMonitorManagement ``` 2. Open `ControlMyMonitorManagement.sln` in Visual Studio 2022 or later 3. Restore NuGet packages: ```bash dotnet restore ``` 4. Build the `MonitorControl` project: ```bash dotnet build MonitorControl/MonitorControl.csproj -c Release ``` 5. Run the executable: ```bash 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 1. After installation, look for the monitor icon in your system tray (near the clock) 2. Click the tray icon to open the control panel 3. The application will scan for DDC/CI monitors (takes 2-5 seconds) 4. 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": 1. Verify your monitor supports DDC/CI (check monitor OSD settings for "DDC/CI Enable") 2. Use a digital cable (HDMI, DisplayPort, DVI) — VGA often lacks DDC/CI support 3. Update your graphics card driver 4. Try unplugging and reconnecting the monitor 5. If using a KVM switch, try connecting directly to the computer 6. Click "Show Log" (appears after 3 seconds) to view debug information --- ## Common Workflows ### Adjusting Monitor Settings **Brightness:** 1. Click the tray icon to open the control panel 2. Find the "Brightness" slider for your monitor 3. Drag the slider to adjust (0-100%) 4. Release the mouse button to apply the change 5. The monitor will update within 1-2 seconds **Contrast:** 1. Follow the same steps as brightness 2. 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:** 1. Open the control panel 2. Find the "Input" dropdown for your monitor 3. 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 4. Select the desired input 5. The monitor will switch within 2-3 seconds **Example: Switch from HDMI to DisplayPort** 1. Current input shows "HDMI-1" 2. Click the dropdown 3. Select "DisplayPort-1" 4. 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](#detecting-additional-ports) below. ### Managing Power States **Turn Off Monitor:** 1. Click the Power button (shows "PowerOn") 2. Monitor enters sleep/standby mode 3. Button updates to "Sleep" or "PowerOff" **Turn On Monitor:** 1. Click the Power button (shows "Sleep" or "PowerOff") 2. Monitor wakes up 3. 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:** 1. Click the **Config** button next to a monitor name 2. 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") 3. Click **Save** 4. The toolbar appears at the top of the control panel **Usage:** 1. Open the control panel 2. Click any quick-switch button to instantly change input 3. 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: 1. Click **Config** next to the monitor name 2. Find the port you want to rename 3. Enter a custom label (e.g., "Xbox", "Work PC", "MacBook") 4. Click **Save** 5. 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: 1. Click **Config** 2. Check the "Hide" checkbox next to unused ports 3. Click **Save** 4. 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:** 1. Click **Config** 2. Click **Detect** 3. Read the warning dialog carefully 4. Click **Yes** to proceed 5. 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 6. 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: 1. Click **Config** 2. Click **Reset** 3. All custom labels are cleared 4. All ports are unhidden 5. Quick-switch toolbar is cleared 6. Discovered ports are removed --- ## Troubleshooting ### Monitor Not Detected **Symptoms**: "No DDC/CI monitors detected" message **Solutions**: 1. **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" 2. **Check Cable Type**: - VGA cables often lack DDC/CI support - Use HDMI, DisplayPort, or DVI instead - Try a different cable if available 3. **Update Graphics Driver**: - Visit your GPU manufacturer's website (NVIDIA, AMD, Intel) - Download the latest driver - Restart after installation 4. **Direct Connection**: - If using a KVM switch, try connecting directly to the PC - Some KVM switches block DDC/CI signals 5. **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**: 1. **Wait After Sleep/Resume**: - After waking PC from sleep, wait 8 seconds before adjusting - Monitor scalers need time to initialize DDC/CI 2. **Check Error Codes**: - Click "Show Log" button (appears after 3 seconds of loading) - Look for error codes like `0xC0262582` or `0xC0262583` - These indicate DDC/CI communication failure 3. **Reduce Command Frequency**: - Don't drag sliders rapidly - Wait 1-2 seconds between adjustments - The application enforces 50ms minimum spacing between commands 4. **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 5. **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**: 1. **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 2. **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 3. **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**: 1. **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 2. **Restart Application**: - Right-click tray icon → Exit - Launch again from Start Menu 3. **Reinstall**: - Uninstall via Windows Settings → Apps - Download latest version - Reinstall 4. **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: 1. Monitor scalers need 5-8 seconds to fully initialize 2. The application activates an 8-second grace period automatically 3. Commands sent during this period are delayed until it expires 4. 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: 1. Open Windows Settings → Time & Language → Language 2. Add or set preferred language 3. 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](https://www.nirsoft.net/utils/control_my_monitor.html) 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:** ```json { "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: 1. Click "Show Log" button in the control panel (appears after 3 seconds of loading) 2. Click "Open Log File" to view in Explorer 3. 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: 1. **Per-Monitor Command Spacing**: Minimum 50ms between commands to the same monitor 2. **Post-Resume Grace Period**: 8-second delay after system wake 3. **Timeout Cooldown**: 3-second backoff after a command timeout 4. **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: [https://git.marketally.com/misc/ControlMyMonitorManagement](https://git.marketally.com/misc/ControlMyMonitorManagement)