Introduction
With this little tool, you can quickly adjust the screen brightness of your laptop or tablet. It also supports commandline arguments to fit your needs.
Background
I recently bought a tablet and wasn't quite satisfied with how to change the screen brightness. So I searched the web for a simple solution - but had no success. First, I hit on the IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS Control but many people struggled with invoking it in C# - in fact, I found only one person that seemed to have managed it... but this thread was closed and I found no way to contact him - *lol* - so I tried another workaround some people suggested and screwed up my gamma and contrast settings - haha - finally I found this page of Samuel Lai - he made a simple sidebar gadget using WMI to access the screen brightness control and also provided some code - funny, as during my search I often read people saying that there is no support in C#. Later on, I realized that I should have taken a closer look at the IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS Control site as Microsoft says here that this control is no longer supported and one should use the WmiMonitorBrightness Class... O.K., whatever - enough blabla :)
Using the Code/Program
The Program
I've tested the program on Win7 (x86) - AFAIK, it won't work on ordinary PCs, as they don't have the necessary hardware support for this. In case of an incompatible system, a message will pop up and the program will quit.
I used VS2010 and .NET 4 for building - therefore, you will need .NET 4 to run the program and VS2010 to change the code... probably you can use a lower version of VS, but AFAIK, the designer isn't compatible.
Well, when starting the program without arguments, it will hide and an icon shows up in the taskbar infoarea. The trackbar shows up by clicking on the icon. Right clicking the icon will open an exit popup.
Arguments
quit
- The trackbar shows up and will close after 4 secs of inactivity.show
- The trackbar shows up and will hide after 4 secs of inactivity.
Well, in fact, you can type anything in order to gain this result - unless it's not listed here as argument...^^hide
- will hide the form initially - this is only useful in combination with a brightnesslevel statement:brightnesslevel in %
- You can pass a level statement to set the brightness immediately (e.g. 25% ) - the level is set to the next higher available level, if the argument is not in the level array
Arguments are seperated by blanks!
e.g. ScreenBrightness 10% quit
ScreenBrightness hide 55%
The order of the arguments is not relevant.
The Code
Well, I've used the WMI queries from Samuel Lai and wrapped around the visual stuff...
The WmiMonitorBrightness
class offers a handful of read-only properties about the actual brightness settings: Active
, CurrentBrightness
, InstanceName
, Level
and Levels
.
A point of interest might be the Level
property as it is an array of valid brightnesslevels
supported by the hardware. They may differ from machine to machine. E.g. my laptop has only 7 levels while my tablet has 10.
My app has only support for one screen - if you have multiple screens, you'll need to query each separately, as I've understood... though I don't see a method for setting the brightness for an individual screen...?
The WmiMonitorBrightnessMethods class is used for setting the screen brightness via the WmiSetBrightness method.
So far, hope you'll like it! :)
Cheers,
Stephan
History
- 4th August, 2011: Initial version
- 6th August, 2011: Minor update
- Included actual brightness value in tooltip text of icon
- Actual brightness value of form will refresh when opening form or moving mouse over icon