ClickMonitorDDC  7.2  Freeware 
------------------------------

Click taskbar notification icons to adjust the real monitor-backlight-brightness/contrast or use mouse wheel over notification icons
to increase/decrease corresponding value, much more comfortable and faster than manually messing around with monitor buttons,
works with external monitors (DDC-protocol) and Laptop-LCD-Display.

The notification icons inform you about the monitor values, you simply look at the icons to check if the wanted values are already set.
You can change monitor values by using sliders or clicking buttons, but you can also create powerful command lines, 
which can be used in batch files or popup menu entries or be appended in icon properties shortcut target.
Command-lines can also be executed automatically by defined times.
You can define hot keys or mouse wheel combinations for executing command-lines, this even works in fullscreen-games!
Command-lines can be executed automatically if selected programs are running in fullscreen, exiting fullscreen restores original values.

Select a special monitor by prepending monitorname, modelname, serialnumber, monitornumber or a self-defined monitorname.
PL2779Q b 36  HPA34T c - 5   sets brightness 36 for monitor with name PL2779Q and decreases actual contrast by 5 for monitor HPA34T
You can change color-profiles, select monitor-inputs, reset monitor, power off/on monitor, dim monitor, set monitor-speaker-volume, 
set system-volume, rotate display and set saturation/vibrance. You can do this by user-interface or by command-arguments.  

ClickMonitorDDC requires Windows 7, 8 or 10. You use this software at your own risk, I disclaim any responsibility for any harm.
You are allowed to use and spread this program for free.


commandline-usage
----------------------------------------------------------------------------------------------------------------------------------
optional                                      Argument  optional  Value          Description
----------------------------------------------------------------------------------------------------------------------------------
If you are using multiple monitors,           b         + or -    0 up to 100    sets brightness (e.g. b 50)
you can start command-line with               c         + or -    0 up to 100    sets contrast (e.g. c 47) 
selecting a special monitor,            
the following arguments will be               r         + or -    0 up to 255    sets red-luminance                          
applied to this selected monitor.             g         + or -    0 up to 255    sets green-luminance
If you do not select a monitor,               l         + or -	  0 up to 255	 sets blue-luminance (bl or l or i)  
the monitor under cursor can be         
auto-selected (option in Settings).           p                   6500K          select color-temperature, User for changing colors 
You can select a Monitor by Monitorname,
Modelname, Serialnumber, Monitornumber        j                   Standard       select monitor-specific presets
or a self-defined Monitorname.                                         
If you pause the mouse pointer over           s                   HDMI1          select a monitor-input (HDMI, DisplayPort, DVI, VGA)
the listed monitor there will appear    
a tooltip-window with Modelname,              k         + or -    0 up to 100    sets color-saturation/vibration in graphics driver
Serialnumber and so on, but not all     
monitors deliver these informations.          o         + or -    0 up to 100    sets volume for monitor-speaker/Audio-out                                                     
Monitornumber means position of the     
listed monitor, but using monitornumber       v         + or -    0 up to 100    sets volume                                                   
is not recommended, because sometimes         m                                  mutes volume  
windows changes positions.                    u                                  unmutes volume 
If specifying Monitorname, Modelname   
or Serialnumber, omit spaces,                 n                   0 or 1         disables or enables dimming  
for instance   HP w2207                 
must be written as  HPw2207                   y                   0 or 1         disables or enables using brightness for target              
or use  "HP w2207"                      
At least use two chars,                       ?                                  notification for current brightness/contrast/volume
so HP would do                          
                                              w                                  rotates display orientation clockwise by 90 degrees

                                              x                                  all monitors off (or specify monitorname x) 

                                              f                                  restore default Monitor-factory-settings

                                              t                                  for instance  t  b 0 c 0   t  b 90 c 80       
                                                                                 toggles between  b 0 c 0  and b 90 c 80  

                                              ;                                  pauses 100 ms (can be used multiple times) 
                                              ,                                  pauses 1000 ms (can be used multiple times)
                                              #                                  following commands are ignored
                                              q                                  terminates ClickMonitorDDC   
                                              z                                  restarts ClickMonitorDDC  
                                              !                                  starts any program e.g. ! notepad.exe   
                                              d                                  returns current Monitor-brightness as errorlevel 
                                              e                                  returns current Monitor-contrast as errorlevel 

                                                                                 getVCP get_VCP setVCP see end of information
                                             
You can use multiple arguments in one commandline (maximum length 259 chars), for instance PL2779Q b + 10 c - 5 HPw2207 b 23 c 49  


more Information
----------------

For controlling your monitor over monitorcable, a fully functional graphics driver has to be installed, and make sure your monitor
has DDC/CI-protocol enabled, also your monitor must support MCCS (VESA Monitor Control Command Set), but monitors differ
in implementing MCCS, so not all arguments may work, especially selecting color-profiles and inputs are often not fully supported, 
besides some monitors offer predefined game and film-modes with fixed values, which prevents some arguments from working.

ClickMonitorDDC is managed by its notification icons, therfore make sure that these icons are not hidden, 
but shown on the taskbar notification area. In Windows settings you can select which icons appear on the taskbar.
Or drag and drop icons fom hidden area to taskbar. You can also change the sequence of taskbar icons by drag and drop the icon.

ClickMonitorDDC supports brightness of laptop/notebook-LCD-displays. Laptops have special FN-key-combinations to do this,
nevertheless I implemented support for laptop-brightness, because laptops allow to add an external monitor, 
and it would be irritating if ClickMonitorDDC would not show both displays. 
ClickMonitorDDC shows values between 0 - 100, which is fine with external monitors,
but some internal LCD-displays support less brightness-levels, the nearest level is chosen automatically.

If you don't prepend a monitorname, modelname or serialnumber in command-lines, then the commands affect the default monitor,
which is the selected monitor in ClickMonitorDDC-window. If you run multiple monitors, then ClickMonitorDDC can set 
automatically the monitor under the cursor as default monitor, you can enable this feature in settings.

ClickMonitorDDC can create menu-popup-entries for executing command-lines, if you enter an additional comment,
you can show or hide the corresponding commandline.

ClickMonitorDDC offers in settings an option named 'show notifications'. If you set values directly in ClickMonitorDDC-window, 
this option has no effect, but if you press defined hot keys and ClickMonitorDDC-window is invisible,
then setting this option gives you an optical feedback, what the pressed hot key did.

ClickMonitorDDC supports easy to use command-line-arguments, maybe the rarely used toggle-feature needs some extra explanation.
for instance define a hotkey with this commandline 
t  b 0 c 0   t  b 100 c 100
first time you press the hotkey, you set monitor brightness 0 and contrast 0,
second time you press the same hotkey, you will set brightness 100, contrast 100,
third time behaves like first time and so on, this way using one hotkey, you can execute two different profiles in turn. 

In settings(Timer,Transfer,Limits), you can define up to 8 times to auto-run-command-lines. Mark checkbox for activating.
If the time-condition is fulfilled then the command-line is executed one-time per day, not permanently like 
software-color-filter-gamma-ramp-programs do. ClickMonitorDDC instead changes the real internal monitor-hardware-values. 
Monitor-values are stored in EEPROM inside monitor. If EEPROMS are excessively written (at least more than 100000) 
they could lose storage-functionality, so more a theoretical issue. But for safety ClickMonitorDDC does not continuously 
write to monitor. Also ClickMonitorDDC buffers values, so the same value is only written once to monitor. 
Executing auto-command-lines only one time per day allows you still changing values as you want.
07:00 AM  b 30
08:00 AM  b 40
09:00 AM  b 50
07:30 PM  b 40
08:20 PM  b 30
08:40 PM  b 20
If you boot up your computer at 02:00 PM then the nearest past time-command b 50 is executed one-time per day, 
at 7:30 PM  b 40  will be executed one-time. You can force executing command-line again by restarting ClickMonitorDDC, 
really exit and start again or use rescan monitors, simply double-clicking ClickMonitorDDC will have no effect, 
because ClickMonitorDDC does not start again, if already running.
Alternatively entering and leaving ClickMonitorDDC-settings will also check and run auto-run-command-line.
You could also execute command-lines with multiple arguments
07:00 AM  b 10 c 20 l 250 
08:00 AM  b 20 c 25 l 252
This would increase brightness, contrast and blue-luminance.

Controlling monitor is done by VCP-codes defined by MCCS (VESA Monitor Command Control Set),
ClickMonitorDDC makes the useful VCP-codes available by User-Interface or by commandline-arguments, 
nevertheless there are two general arguments, 
e.g. getVCP 0x12       shows actual and maximum contrast in a messagebox
e.g. get_VCP 0x12      returns actual VCP code value as errorlevel
e.g. setVCP 0x10   50  sets monitor-brightness to 50, same as b 50
e.g. setVCP 0x10 + 10  increases actual monitor-brightness by 10, same as b + 10
but you should not use setVCP or getVCP, because in rare cases it could harm your monitor,
if you really want to dig deeper in VCP-codes, then use softMCCS from EnTech Taiwan and read MCCS-documentation. 


Version-History
---------------

7.2
On some systems, monitorname was not displayed, fixed.
Now auto-run commands can also be run if app is not in full-screen.

7.1
Better usage of duplicated (cloned) monitors. 
New argument get_VCP returns VCP code value as errorlevel e.g. get_VCP 0x12 returns actual contrast.

7.0
Now clicking icons with middle mouse-button toggles two values, enter values in mouse-settings, e.g. brightness 0 and 50, 
then middle-clicking a brightness-icon sets brightness 0, again middle-clicking sets 50, again middle-clicking 0 and so on.
Using mousewheel with defined modifiers did not execute assigned commandline. Fixed.
Default-delay for repeating command-lines is 100 ms, can now be lowered to 10 ms.

6.9
In rare cases using mouse-wheel caused temporarily strange effects like system-beeps. Fixed.
Exiting selected fullscreen-programs now also restores eventually changed color-temperature or user-colors.
Clicking outside ClickMonitorDDC-mainwindow automatically closes the window, can now be deactivated in settings.
Improved notifications, default is off, because it can be annoying.

6.8
improved VCP-code-section

6.7
New VCP-code-section (right click notification icon)
Restore values did not work in version 6.6

6.6
Shutting down windows with some rare hardware-configuration could result in an error-message. Fixed.
new arguments
e.g. getVCP 0x12       shows actual and maximum contrast in a messagebox
e.g. setVCP 0x10   50  sets monitor-brightness to 50, same as b 50
e.g. setVCP 0x10 + 10  increases actual monitor-brightness by 10, same as b + 10

6.5
Exiting selected fullscreen-programs now also restores eventually changed preset.
Improved restore brightness/contrast after monitor wake up.
t Toggle remembers position after restart.
Check for update, daily, weekly, never.

6.4
Now you can select monitor-specific presets (e.g. Movie, Games), new argument j for selecting presets, e.g. j Standard

6.3
no timer commands or dimming during fullscreen-auto-run-commands.

6.2
There was a timing problem with a very few monitors, which wrongly report 0x6B,
this could prevent ClickMonitorDDC from detecting these monitors. Fixed.

6.1
Now also WUP-Apps (these new Win8/10 apps like Windows Edge) can be used for Auto-Run, 
that means if running maximized, a command-line is executed, but WUP-Apps cannot be selected by file-requester, 
so you have to run the app, if the app is visible, then the app is listed and can be selected for auto-run.
Setting brightness in monitor is normally done by code 0x10, but a few monitors use code 0x6B, now you can choose code.
New argument # starts comment, so after # all commands are ignored, this way you can keep your command-line for future usage.
New argument ! starts any program e.g. ! notepad.exe

6.0
You can set NVIDIA Digital Vibrance and AMD Saturation by using mouse wheel over notification icon or use new argument k 
You can have in your computer a NVIDIA and a AMD graphics card, both with monitors attached, 
each monitor has its own independent saturation-value/icon. 
Graphics driver sends less (0-49) or more (51-100) saturated colors to monitor,
a higher value (51-100) can enhance videos and games, for normal text-work use default 50
ClickMonitorDDC shows Saturation/Vibrance always in range 0 - 100, that means AMD Saturation range 0 to 200 
is recalculated to 0 - 100 by respecting min max levels. k 50 would result in set Saturation 100 for AMD.  
Now you can select programs like browser, video-players or games and define an individual command-line, 
this way you can automatically apply different brightness/contrast/saturation-values for each selected program.

5.9
Improved powering off monitors.
new arguments, n 0 disable dimming monitor, n 1 enable dimming, 
y 0 disable using brightness from source monitor for target monitor, y 1 enable

5.8
Now you can power off a single monitor by clicking a checkbox beside the listed monitor.
Some unusual multi-monitor-setup could result in additional notification icons, which disappeared only on mouse over.

5.7
Improved settings of notification icons. There is also a new notification icon for a possible monitor speaker.
Turning on/off a monitor connected by DisplayPort could open window and leave icons behind. Fixed.

5.6
Now you can rotate display orientation clockwise by 90 degrees, can also be done by hot key with new argument w
A few monitors report erroneously success if still processing a previous command, 
now you can separate commands by ; (pauses 100 ms) , (pauses 1000ms) 
for instance r 255 , g 255 , bl 255 would give the monitor enough time to process each command, 
but normally these pauses are not needed

5.5
Latest versions handled laptop-LCD's in a different way, which did not work with some laptops,
now the old reliable method is used again, which should work with any laptops.
Most messageboxes can now be suppressed.

5.4
ClickMonitorDDC can control default-volume by slider, buttons or argument v
There is a new slider in main-window-RGB-area for monitor-speaker/Audio-out-volume, or use new argument o      
Right click listed monitor, select dim monitor, enter time-period of inactivity and dim-brightness.

5.3	
Restore last values, hiding icons, ignore monitor now differentiates identical monitors.
Right click listed monitor to modify its name, maybe useful for identical monitors.

5.2	
In settings there are new buttons to check for update version.
If you right click a listed monitor in main window, then you can hide or show the icons for this monitor,
also you can determine not to read values from a device, maybe useful if AV receiver, saves 100 ms.

5.1	
some minor bug-fixes regarding icons, tooltips, utilize monitors.

5.0	
New option: When ClickMonitorDDC starts, last brightness and contrast values will be restored, 
may be useful if monitor forgets set values after power off.
New options for (de)activating hot keys or mouse wheel. If deactivated, corresponding hook is not installed.
Now you can set a repeat delay value for hot keys or mouse wheel, 
useful if you want to slow down increasing/decreasing commands like for instance b + 10

4.9	
New Log-File option in settings, may be useful for informational or debugging purposes.
You can choose any name or location for protocol-file, default is ClickMonitorDDC.txt in userprofile-directory.
Runing ClickMonitorDDC with argument f will restore default Monitor-factory-settings, 
equivalent to clicking 'Reset Monitor' in ClickMonitorDDC-Window.

4.8	
Sometimes volume-icon was automatically added. fixed.
 	
4.7	
Verify values: After set value, read value from monitor, to check success, because a few monitors report success, 
but in fact there was no change, costs additional 50 ms.
Save values: A few monitors forget changes done by user over monitorcable after powering off, this option makes sure 
that values are really stored in monitor, costs additional 200 ms.

4.6	
You can choose from seven different fonts for notification icons, especially useful for differentiating multiple monitors.
Now you can run ClickMonitorDDC without notification icons, then ClickMonitorDDC-main-window can only be opened 
by running program again (without arguments), and context menu can only be opened by right clicking in ClickMonitorDDC-window.
Argument x shuts all monitors down to power-safe-mode, this is done by windows, and is not monitor-specific.
Now if you prepend a monitornumber, monitorname, modelname or serialnumber then only this monitor is set to power-safe-mode 
by using MCCS-VCP-control-code. For instance the following command-line sets a monitor with name PHL32M and a monitor
with name HP27WZ to power-safe-mode. All other monitors are ignored.
PHL32M x HP27WZ x
Running this commandline again would wake up these monitors.

4.5	
ClickMonitorDDC now shows brightness/contrast notification icons for each monitor, not only one icon like in earlier versions, 
this is very useful with multiple monitors, because now you can use mouse wheel for each monitor-icon.
You should arrange notification icons by drag & drop. This cannot be done automatically by program.

4.4	
ClickMonitorDDC Portable version is a file which can be run from any location without installation, 
but you can also download a Setup version, which uses the standard Windows Install/Uninstall-procedure. 
Setup version was created with Inno Setup by Jordan Russell, Martijn Laan. 
http://www.jrsoftware.org/
If you want to 'uninstall' ClickMonitorDDC, right click notification icon and then click 'Uninstall program'
or use Windows Uninstall program if using Setup version.
It doesn't matter which version you use, both versions run the same ClickMonitorDDC.exe file.
If you mess around with monitor-buttons, ClickMonitorDDC may show outdated values.
Using the new Settings-Option 'Reread values from monitors' will force ClickMonitorDDC to reread values from external monitors
before opening ClickMonitorDDC-window, but this delays opening of window, so normally this option is not recommended, 
alternatively you can right click notification icon and click 'Rescan monitors'.
But if you only work with ClickMonitorDDC there will never be outdated values.
Windows informs programs if Laptop-LCD-brightness changes, but for external monitors this is impossible.

4.3	
ClickMonitorDDC is a small program without any suspicious activities, no calling home, no update-function, no writing to registry, 
nevertheless sometimes very few heuristic Anti-Virus-engines think there would be suspicious code and show an unspecific warning.
This new version is created with other compiler option and at least for the moment the warnings are gone.

4.2	
ClickMonitorDDC supports multiple monitors, simply by clicking in the main-window, or by using commandlines with
monitorname or modelname or serialnumber or monitornumber, these commandlines can also be used for mouse wheel + key-combinations, 
but for easy use, you can simply use mouse wheel alone over noctification-icons.
ClickMonitorDDC realizes hotkeys by keyboard/mouse-hooks. 
Now these hooks run in a separate thread, this way mouse/keyboard-handling should always be smooth.

4.1	
Monitor name should be defined in EDID using 0xFC descriptor, external monitors normally do this, but internal LCD-Display 
often do not implement this 0xFC descriptor, instead sometimes there is a 0xFE descriptor, which means unspecified text,
ClickMonitorDDC now uses this unspecified text for monitor name if there is no concrete monitor name definition.
ClickMonitorDDC shows values between 0-100, which is fine with external monitors, but internal LCD-display may support less levels,
often only 16 levels, for instance 1 3 4 5 6 8 10 13 17 22 29 38 49 63 80 100. 
Windows says every laptop must report a maximum brightness level of 100,
but there are old laptops reporting for instance 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15. 
These numbers only reflect a corresponding hardware-brightness-level and different Laptop models often have different numbers.
ClickMonitorDDC now recalculates level numbers to 0 - 100 in a linear more user-friendly way.
If you activate in settings 'same Laptop-Brightness for battery and plugged', then Laptop-Display keeps same brightness 
ignoring power-source-changes. Windows 10 comes with an additional Battery saver feature, which can automatically lower brightness, 
so for instance brightness 100 is forced down to brightness 70, there is no way to set brightness back to 100 if Battery saver 
with lower brightness option is active, therefore 'same Laptop-Brightness for battery and plugged' is temporarily deactivated if 
Battery saver is detected. Battery saver also gets automatically activated if 'Power saver' plan is chosen and Laptop is on battery.

4.0	
ClickMonitorDDC now uses for Laptop-Display-handling WmiMonitor classes instead of DeviceIoControl.

-----------------------------------------------------------------------------------

You are allowed to use and spread ClickMonitorDDC for free.
You use this software at your own risk, I disclaim any responsibility for any harm.
There is no warranty, express or implied. The author specifically disclaim any implied warranties of merchantability and fitness 
for a particular purpose. In no event will the author be liable for any damages, including but not limited to any lost profits, 
lost savings or any incidental or consequential damages, whether resulting from impaired or lost data, 
software or computer failure or any other cause, or for any other claim by the user or for any third party claim.
