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.
276 lines
8.8 KiB
Markdown
276 lines
8.8 KiB
Markdown
# Monitor Control Manager
|
|
|
|
A lightweight Windows utility for controlling monitor settings via DDC/CI. Adjust brightness, contrast, input source, and power settings directly from your system tray.
|
|
|
|

|
|

|
|

|
|
|
|
## Table of Contents
|
|
|
|
- [Features](#features)
|
|
- [Requirements](#requirements)
|
|
- [Installation](#installation)
|
|
- [Usage](#usage)
|
|
- [Configuration](#configuration)
|
|
- [Command-Line Options](#command-line-options)
|
|
- [Troubleshooting](#troubleshooting)
|
|
- [Credits](#credits)
|
|
- [License](#license)
|
|
|
|
## Features
|
|
|
|
- **System Tray Integration** - Clean popup interface accessible from taskbar
|
|
- **Multi-Monitor Support** - Control all DDC/CI compatible displays
|
|
- **Brightness & Contrast** - Slider controls with real-time feedback
|
|
- **Input Source Switching** - Auto-detects available inputs (HDMI, DisplayPort, DVI, VGA)
|
|
- **Port Configuration** - Customize port labels, hide unused ports, and create quick-switch buttons
|
|
- **Quick-Switch Toolbar** - One-click switching between frequently-used input sources
|
|
- **Port Detection** - Automatically discover available input ports on your monitor
|
|
- **Power Management** - On, Sleep, and Off controls
|
|
- **Multi-Language** - Auto-detects system language (English, Spanish, French, German, Chinese, Japanese, Portuguese, Italian, Hindi)
|
|
- **Auto-Update Check** - Notifies you when new versions are available
|
|
- **System Resume Protection** - Prevents DDC/CI commands during monitor wake-up to avoid scaler lockout
|
|
|
|
## Requirements
|
|
|
|
- Windows 10/11
|
|
- .NET 9.0 Runtime
|
|
- DDC/CI compatible monitor(s)
|
|
|
|
> **Note:** Most external monitors support DDC/CI, but some laptop internal displays and certain monitors may not support this protocol. If you encounter error codes like `0xc0262582` or `0xc0262583`, see the [Troubleshooting](#troubleshooting) section.
|
|
|
|
## Installation
|
|
|
|
### From Release
|
|
|
|
1. Download the latest release from the [releases page](https://git.marketally.com/misc/ControlMyMonitorManagement/releases)
|
|
2. Extract the archive to a folder of your choice
|
|
3. Run `MonitorControl.exe`
|
|
4. The app will appear in your system tray
|
|
|
|
### Build from Source
|
|
|
|
```powershell
|
|
git clone https://git.marketally.com/misc/ControlMyMonitorManagement.git
|
|
cd ControlMyMonitorManagement
|
|
dotnet build
|
|
dotnet run --project MonitorControl
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Basic Operation
|
|
|
|
1. Launch the application - it minimizes to the system tray
|
|
2. Click the tray icon to open the control panel
|
|
3. Adjust brightness/contrast with sliders
|
|
4. Select input source from dropdown (if multiple available)
|
|
5. Toggle power state with the power button
|
|
6. Click outside the popup to close
|
|
|
|
### Port Configuration
|
|
|
|
Click the **Config** button next to any monitor name to customize input ports:
|
|
|
|
- **Custom Labels** - Rename ports (e.g., "HDMI-1" → "PC", "DisplayPort-1" → "Laptop")
|
|
- **Hide Ports** - Remove unused ports from the dropdown
|
|
- **Quick-Switch** - Add frequently-used ports to the toolbar for one-click switching
|
|
- **Port Detection** - Click **Detect** to automatically discover available input ports
|
|
|
|
> **Port Detection Warning:** This feature temporarily switches your monitor's input source to probe for available ports. Your screen may go dark briefly during each probe. This is safe for most monitors but should not be run repeatedly in a short time. You can cancel detection at any time.
|
|
|
|
### Quick-Switch Toolbar
|
|
|
|
After configuring ports with "Show in quick-switch toolbar" enabled, buttons will appear in the main window for instant switching between configured inputs across all monitors.
|
|
|
|
## Configuration
|
|
|
|
### Configuration Files
|
|
|
|
Monitor settings are stored in JSON format:
|
|
|
|
**Windows:** `%APPDATA%\MonitorControl\config.json`
|
|
|
|
### Configuration Structure
|
|
|
|
```json
|
|
{
|
|
"Monitors": [
|
|
{
|
|
"SerialNumber": "ABC123456",
|
|
"MonitorName": "Dell U2720Q",
|
|
"Ports": [
|
|
{
|
|
"VcpValue": 15,
|
|
"DefaultName": "DisplayPort-1",
|
|
"CustomLabel": "Laptop",
|
|
"IsHidden": false,
|
|
"ShowInQuickSwitch": true
|
|
},
|
|
{
|
|
"VcpValue": 17,
|
|
"DefaultName": "HDMI-1",
|
|
"CustomLabel": "Desktop PC",
|
|
"IsHidden": false,
|
|
"ShowInQuickSwitch": true
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### VCP Codes Reference
|
|
|
|
The application uses DDC/CI VCP (Virtual Control Panel) codes to communicate with monitors:
|
|
|
|
| Code | Function | Values |
|
|
|------|----------|--------|
|
|
| `10` | Brightness | 0-100 |
|
|
| `12` | Contrast | 0-100 |
|
|
| `60` | Input Source | See table below |
|
|
| `D6` | Power Mode | 1=On, 4=Sleep, 5=Off |
|
|
|
|
### Input Source Values
|
|
|
|
| VCP Value | Input Type |
|
|
|-----------|------------|
|
|
| 1 | VGA-1 |
|
|
| 2 | VGA-2 |
|
|
| 3 | DVI-1 |
|
|
| 4 | DVI-2 |
|
|
| 15 | DisplayPort-1 |
|
|
| 16 | DisplayPort-2 |
|
|
| 17 | HDMI-1 |
|
|
| 18 | HDMI-2 |
|
|
|
|
## Command-Line Options
|
|
|
|
The application can be controlled via command-line using `ControlMyMonitor.exe` (included in the installation):
|
|
|
|
### Set Brightness
|
|
|
|
```powershell
|
|
ControlMyMonitor.exe /SetValue Primary 10 70
|
|
```
|
|
|
|
### Set Contrast
|
|
|
|
```powershell
|
|
ControlMyMonitor.exe /SetValue "ABC123456" 12 65
|
|
```
|
|
|
|
### Switch Input Source
|
|
|
|
```powershell
|
|
# Switch to HDMI-1
|
|
ControlMyMonitor.exe /SetValue "\\.\DISPLAY1\Monitor0" 60 17
|
|
|
|
# Switch to DisplayPort-1
|
|
ControlMyMonitor.exe /SetValue Primary 60 15
|
|
```
|
|
|
|
### Power Control
|
|
|
|
```powershell
|
|
# Turn on
|
|
ControlMyMonitor.exe /TurnOn Primary
|
|
|
|
# Turn off (some monitors use 4 instead of 5)
|
|
ControlMyMonitor.exe /SetValue Primary D6 5
|
|
|
|
# Sleep
|
|
ControlMyMonitor.exe /SetValue Primary D6 4
|
|
```
|
|
|
|
### Get Current Value
|
|
|
|
```powershell
|
|
# Get brightness (returns value as exit code)
|
|
ControlMyMonitor.exe /GetValue Primary 10
|
|
echo %errorlevel%
|
|
```
|
|
|
|
### Switch Between Values
|
|
|
|
```powershell
|
|
# Toggle between 30%, 50%, and 90% brightness
|
|
ControlMyMonitor.exe /SwitchValue Primary 10 30 50 90
|
|
|
|
# Toggle monitor on/off
|
|
ControlMyMonitor.exe /SwitchValue Primary D6 1 5
|
|
```
|
|
|
|
### Export/Import Settings
|
|
|
|
```powershell
|
|
# Save current monitor settings
|
|
ControlMyMonitor.exe /SaveConfig "c:\backup\monitor.cfg" Primary
|
|
|
|
# Load saved settings
|
|
ControlMyMonitor.exe /LoadConfig "c:\backup\monitor.cfg" Primary
|
|
```
|
|
|
|
### Monitor Identifiers
|
|
|
|
You can use several identifiers in place of `Primary`:
|
|
|
|
- `Primary` - Primary monitor
|
|
- `Secondary` - Secondary monitor
|
|
- `"ABC123456"` - Serial number
|
|
- `"\\.\DISPLAY1\Monitor0"` - Device path
|
|
- `"22EA53"` - Monitor name
|
|
|
|
To find your monitor's identifier, open the control panel and press `Ctrl+M` (if supported by the full WPF application).
|
|
|
|
## Troubleshooting
|
|
|
|
### Error 0xc0262582 / 0xc0262583
|
|
|
|
These errors indicate Windows cannot communicate with your monitor via DDC/CI. Try these solutions:
|
|
|
|
1. **Update Graphics Driver** - Ensure you have the latest driver from your GPU manufacturer
|
|
2. **Try Different Cable/Port** - Switch between VGA, DVI, HDMI, or DisplayPort
|
|
3. **Remove KVM Switch** - Connect monitor directly to the computer
|
|
4. **Enable DDC/CI in Monitor OSD** - Some monitors have a setting to enable/disable DDC/CI
|
|
5. **Check Windows Display Settings** - Ensure the monitor is properly detected
|
|
|
|
### Monitor Not Detected
|
|
|
|
- Verify your monitor supports DDC/CI (check manufacturer specifications)
|
|
- Laptop internal displays often do not support DDC/CI
|
|
- Some USB-C/Thunderbolt adapters may not support DDC/CI passthrough
|
|
|
|
### Commands Not Working After Sleep/Resume
|
|
|
|
The application automatically detects system resume and enforces an 8-second grace period before sending DDC/CI commands. This prevents scaler lockout on monitors that need time to fully wake up.
|
|
|
|
### Slow Response or Timeouts
|
|
|
|
- DDC/CI communication can be slow (50-100ms per command)
|
|
- Multiple monitors increase total response time
|
|
- Some monitors have slower DDC/CI implementations
|
|
- If timeouts occur frequently, the application will automatically back off for 3 seconds
|
|
|
|
### Debug Logging
|
|
|
|
If the control panel takes more than 3 seconds to load, a **Show Log** button will appear. Click it to view detailed debug information including:
|
|
|
|
- Monitor detection results
|
|
- DDC/CI command timing
|
|
- Error messages and stack traces
|
|
|
|
Log files are saved to: `%TEMP%\CMM\debug.log`
|
|
|
|
## Credits
|
|
|
|
- **Original Project**: [rictirse](https://github.com/rictirse) - ControlMyMonitorManagement base
|
|
- **DDC/CI Engine**: [Nir Sofer](https://www.nirsoft.net/utils/control_my_monitor.html) - ControlMyMonitor (freeware)
|
|
- **Enhancements**: David H Friedel Jr - System tray UI, input switching, port configuration, quick-switch toolbar, localization, update checker, DDC/CI reliability improvements
|
|
|
|
## License
|
|
|
|
MIT License - See [LICENSE](LICENSE) for details.
|
|
|
|
**Note:** ControlMyMonitor.exe is freeware by Nir Sofer (free distribution, no modification). The original ControlMyMonitorManagement code by DangWang has no explicit license. New contributions (system tray application, port configuration, quick-switch, DDC/CI improvements) are MIT licensed. |