Brightness Controller

General Info

Brightness controller is a small tool that allows the user to adjust the backlight brightness of Apple Displays on a Windows PC.
I only own a 27" Cinema Display and have to rely on the users to do the testing for other displays.
Brightness controller has been tested on Windows 7 and 8 in both 32 and 64bit. But it should also work fine on Windows Vista. It also supports multiple displays at once.

Currently supported displays

27" Apple Thunderbolt Display
27" Apple LED Cinema Display
24" Apple LED Cinema Display
23" Apple Cinema Display HD (Acrylic frame)
20" Apple Cinema Display (Aluminum frame)
20" Apple Cinema Display (Acrylic frame)


I will try to update it to support additional models but i will need help from other users who have different screen types.
If you wan't to contact me about feature requests or wan't to help adding aditional display models then contact me on Google+ or in this [H]ard|Forum thread or create a issue in the issue tracker.

Downloads

Download version 1.4.4

Download older versions

Donations

If you like the tool please donate for further development.


Screenshots


Main Window

General Options
Hotkey Options
Profile Options


Changelog


1.4.4 - 11/02-2013

- Fixed a rare bug where a corrupted user configuration file caused a crash during startup.

1.4.3 - 03/12-2012

- Fixed bug where the main windows was opened behind other open windows.

1.4.2 - 18/10-2012

- Added support for 20" Cinema Display with acrylic frame.
- Enabled multi screen support.
- Fixed system tray right click menu position when DPI scaling is higher than 100%.
- Lots of code changes including improved threading and performance.
- Fixed some power management issues that might prevent the PC from going to sleep.
- Brightness controller now requires .net 4.5 installed.

1.3.1 - 09/09-2012

- Added support for 20" Cinema Display with aluminum frame.
- Merged brightness control logic for all displays.
- Smoother brightness change when keeping shortcut buttons pressed.

1.2.3 - 20/08-2012

- Added support for 23" Cinema Display HD with acrylic frame.
- Fixed startup crash with 24" Cinema Display.
- Improved numeric inputs so letters can't be pasted.
- Layout adjustments, spelling fixes, better error messages.

1.1.0 - 13/08-2012

- The step size of the increase/decrease Hotkeys can now be adjusted.
- Added profiles that allow the user to set the brightness to a specfied values.
- Redesigned options.
- Improved error handeling.

1.0.1 - 15/06-2012

- Fixed detection of 27" Thunderbolt Display.

1.0.0 - 14/06-2012

- Added support for 24" Cinama Display.
- Added support for 27" Thunderbolt Display.
- Added tooltip when moving the slider.

0.9.0 - 12/05-2012

- Collect data about HID devices to add support for more screens.
- Removed the last references to windows forms.

0.8.0 - 07/04-2012

- More keys allowed as hotkeys.
- Added support for direct Hotkeys without any modifier keys.
- Improved Update checking and added fallback sites.
- Lots of changes behind the scenes like improved threading and preperations for future multi monitor support.

0.7.1 - 19/03-2012

- Fixed bug where disabled Hotkeys could not be enabled.

0.7.0 - 19/03-2012

- USB changes to allow the program to be compiled for both x86 and x64.
- Settings are now upgraded from previous versions.
- Options window now opens centered on main window.
- No longer installs in "Program Files (x86)" on x64 systems.
- Added Supports for fast user switching.
- Fixed a crash bug that occured when opening about box from system tray.
- Installer now detects if program is running.

0.6.0 - 15/03-2012

- Hotkeys can be individually enabled or disabled.
- New Hotkey for turning off the display.
- Improved asynchronous update checking.
- Added in app and web donation buttons.
- Lots of code cleanup.

0.5.0 - 26/02-2012

- Added options to configure Hotkeys.

0.4.0 - 25/02-2012

- Initial public release.

65 comments:

  1. Hi,

    Thank you very much for your product. Unfortunately, it did not work for me. I am running win7-64 + ACD 27 + NVIDIA GTX 670. It says "Unable to detect any Apple Display USB HID Devices".

    Thanks,

    Alex

    ReplyDelete
    Replies
    1. Did you remember to connect the usb cable?

      Kind regards
      Jens Schumacher

      Delete
    2. Hello. I connected Apple Thunderbolt Display 27" to my PC.
      When I run Brightness Controller, I see a message:
      "Unable to detect any Apple Display
      Please make sure the USB cable is connected."
      But my monitor does not have USB cable...

      Delete
    3. The thunderbolt display has the nessecary data connection via the thunderbolt cable....
      Are you using the apple control panel or any other software that might interfer?
      Has windows detected the other HID devices in the monitor like the built in webcam?

      It might also be a new hardware revision of the thunderbolt display.
      Try "Help -> Gather HID Information" in Brightness Controller.
      If it finds any information you can create a new issue in the Brightness controller issue tracker.
      https://bitbucket.org/Gensplejs/brightnesscontroller/issues

      Delete
    4. I have not install any software.
      Display is has sound, but no camera and brightness is very low.
      What is apple control panel? It is Bootcamp?
      Maybe You can give me a link to a apple control panel...

      thanks in advance!

      Delete
  2. @Lecycliste
    I deleted your comment by accident. Sorry.
    In response to your question about multi monitor support.

    Yes it can be done.
    It is already in the issue tracker and the code has been written. But i despise releasing untested features so multi monitor support has been disabled for now.
    Issue Link


    But if you are willing to test it and give me some feedback i will release a beta with support for multiple monitors.

    Regards
    Jens Schumacher

    ReplyDelete
    Replies
    1. That sounds great!
      Where can i find the beat so i can test it?
      -Aske

      Delete
    2. Beta not beat ofc :-)
      you can mail me information to lecycliste@gmail.com
      Og vi kan snakke dansk hvis du foretrækker det :-)
      Hav en god dag!

      Delete
    3. Umiddelbart virker det helt fint for mig. Den eneste måde jeg har kunne få programmet til at crashe på er ved at prøve at benytte "display off" genvejen. Den resulterede i følgende kode:

      System.Runtime.InteropServices.MarshalDirectiveException: Cannot marshal 'parameter #3': Invalid managed/unmanaged type combination (Int32/UInt32 must be paired with I4, U4, or Error).
      at BrightnessController.Interop.NativeMethods.SendMessage(IntPtr hWnd, Int32 hMsg, Int32 wParam, Int32 lParam)
      at BrightnessController.DisplayPowerController.TurnOffDisplay()
      at HotKeys.HotKey.ThreadPreprocessMessageMethod(MSG& msg, Boolean& handled)
      at System.Windows.Interop.ThreadMessageEventHandler.Invoke(MSG& msg, Boolean& handled)
      at System.Windows.Interop.ComponentDispatcherThread.RaiseThreadMessage(MSG& msg)
      at System.Windows.Threading.Dispatcher.TranslateAndDispatchMessage(MSG& msg)
      at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
      at System.Windows.Application.RunDispatcher(Object ignore)
      at System.Windows.Application.RunInternal(Window window)
      at BrightnessController.App.Main()

      Måske det kunne være muligt at lave et lille "flueben"-boks i main window så de to sliders følges ad? Bare for lækkerhedens skyld :-)
      Skide godt arbejde!

      Delete
    4. Jeg har også prøvet at bruge programmet selvom jeg har deaktiveret en af skærmene, og det ser også ud til at virke fint, også når skærmen aktiveres igen.

      Delete
    5. "Display off" genvejen har jeg fikset nu og det kommer med i næste release.
      Men jeg ved ikke helt med fluebenet til at låse dem sammen. Det skal jeg lige tænke lidt over.

      Det vil give lidt problemer med auto brightness... Hvis der kommer sollys på den ene skærm og den så begynder at skrue på skal den anden skærm så følge med selv om den står i skygge?
      Det er umiddelbart den eneste løsning jeg kan se hvis jeg skal låse dem sammen.

      VH
      Jens

      Delete
    6. Try the newest beta...
      LINK
      Screen off shortcut should be fixed.

      Delete
    7. I just picked up a 2nd of the 27" led ones (display port). Will it actually work? I've got an open display port on my sli card. I am planning on adding another card and 3rd monitor in a couple of months.

      I'm assuming I can only have one USB dongle plugged in at a time, so I will have to switch them to set the brightness on monitor 2 temporarily? Any other caveats?

      Delete
    8. If you use the newest beta linked above you can connect both displays at the same time and control them independently.
      Brightness controller will show a slider for each display.

      Delete
    9. So in that case I should hook up both USB dongles? Will it matter that it is plugged into video card #2 in an SLI setup?

      Will this eventually be able to support 3 monitors for things like eyefinity or nvidia 3d vision?

      Delete
    10. Evidentially, being the SLI noob that I am I didn't realize only the first card in an SLI chain can actually output video. So, that means I am stuck with those Atlona DVI to Displayport converters for any additional ACDs on my desktop.

      Will the Brightness Controller work with these? I'm assuming yes, but I have assumed too much already so I'm just going to come out and ask

      Delete
    11. Brightness controller communicates with the monitor via the USB cable not the Display Port cable. Converters are not an issue.

      The beta supports more than one display. So 2, 3, 4 or whatever floats your boat :-)

      I got AMD Radeon cards myself because of the native mini Display Port. Eyefinity cards even have 6X mini display port on one GFX card :-)

      Delete
    12. It worked! When I get paid next I will donate. Hey offhand does anyone know if these monitors support 2d eyefinity/surround gaming when one monitor is using a dp-minidp connector and 2 are using atlona dp400 type devices. I'm assuming the brightness controller app will work with 3 monitors.

      Delete
    13. Another question, is it possible to sleep one monitor while keeping another active other than unplugging it? Watching movies with both displays active is somewhat distracting.

      Delete
    14. I don't see any way to putting only one monitor to sleep with the windows API's i currently use. But I will check some more to see if there is any way of doing that.

      /Jens

      Delete
    15. Any chance one of you multi display users can take a screenshot of the main windows for me, so i can put it on the page?

      I really just know how it looks in my mind :-) need to write code for a dummy display so i can support multiple displays better. (locking brightness of secondary to primary display and stuff like that)

      Delete
    16. By the way idjit.
      I just remembered that you can press Win+P (in win7/8 at least) to get nice multi monitor shortcut options directly in windows.
      If you can chose single monitor windows should kill the signal to your secondary monitor and it should turn off.
      (i have not tested it.)

      /Jens

      Delete
    17. Here's a screen with two monitors :)

      http://i.imgur.com/HE5dB.jpg

      Delete
    18. Thanks...
      I will try to do some more for dual monitor setups in the next release(a slightly better layout and brightness locking).

      Delete
    19. Jens -

      I finally have 3 monitors up and running with your Brightness Controller app, here's a screenshot for your files: http://i.imgur.com/nhdCD.jpg

      Delete
    20. actually strike that one, too much personal info if you can just delete that last post I'll send another one. Damn our digitally integrated lives.

      Delete
    21. 2nd attempt: http://i.imgur.com/4B5Ok.jpg

      Delete
    22. got it working in 2d surround - http://i.imgur.com/dkd2G.jpg

      Delete
  3. Please make support for old ACD 20"

    It has a USB HID, working on Windows 7

    Tried three different versions of you app - says no ACD found.

    ReplyDelete
    Replies
    1. Hi.
      I created an issue in the issue tracker HERE
      If you can add the information i need i will add support for your display.

      Regards
      Jens Schumacher

      Delete
  4. Noticed that my brightnesscontroller takes too long to start after reboot - about 20 sec after all loaded.
    Installed new version - the same... (20" Aluminium)

    ReplyDelete
  5. I get the following error: "Unable to open Cinema Display USB HID Device. Make sure any other program using the device are closed.

    I am using Windows 8 x64 on my 13" RMBP. I am also using a thunderbolt display, not a cinema display.

    ReplyDelete
    Replies
    1. Well.. Make sure the apple control panel is not open.

      If that does not solve the problem then try selecting "Help -> Gather HID information" and post the results here.
      That will allow me to add your display if it is a new hardware revesion/variation of the thunderbolt display.

      Delete
  6. Thank you! Thiws works perfectly on my 27" Cinema Display (Windows 8 x64) AMD CPU and AMD HD 6790 GFX)

    ReplyDelete
  7. Hello! I have a Win7 workstation with 2 24" LED Cinema Displays. Upon connecting the USB cables some devices are found by windows and drivers get automatically installed.

    Unfortunately the brightness program does not find the Apple displays, and the "Gather HID information" option gives the same results as on a PC with no Apple screens - there is nothing listed.

    Are some special drivers needed? What should be listed in Windows Device Manager so that your app can pick up the screens?

    ReplyDelete
    Replies
    1. Hello! I found out that the previous workstation user installed Bootcamp, and it seems that it was taking over the display connection. After uninstalling Bootcamp, your app worked like a charm ;).

      Delete
    2. Ok good to know that you got it working.
      The access to the HID device is exclusive and if another program has an open connection to the device i can't connect to it.

      I will look into the problem in the future and see if i can add a better error message if the device is present but in use.
      But i need to make some changes to the HID library that i am using to support that.

      Delete
  8. thank you very much, best program to control brightness for windows.
    what benefits to use .net 4.5 in last release ?

    ReplyDelete
    Replies
    1. No benefits for the user really:-)
      I have changed some code with the upgrade that should allow for better performance but nothing most users would notice.
      The reason i upgraded is that this is a hobby project. I use my hobby projects to test and learn about new framework features (and related pitfalls) before i need to use them at work :-).

      Regards
      Jens Schumacher

      Delete
  9. Mine said UNable to open Cinema Display USB HID Device as well. I'm using MacBook Pro from 2009, windows 7 enterprise 64 bit, and a new 27 inch cinema display. Here is my HID information.





    \\?\hid#vid_05ac&pid_0236&mi_01&col02#7&2b202671&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}
    Touchpad
    Apple Inc.

    12
    1452
    566
    129


    1
    255
    64
    0
    17

    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0

    1
    1
    0
    1
    0
    0
    0
    0
    1
    1



    255
    68
    false
    2
    0
    1
    255
    false
    false
    false
    true
    false
    0
    8
    16

    0
    0
    0
    0
    0

    0
    0
    -128
    127
    0
    -1
    4
    4
    0
    0
    0
    0
    0
    0




    255
    68
    false
    0
    0
    1
    255
    false
    false
    false
    true

    0
    0
    0
    0
    0
    0
    0
    0
    0
    0

    2
    2
    0
    0
    0
    0
    0
    0



    ReplyDelete
    Replies
    1. If you are using a mac book pro you probably installed the bootcamp drivers.
      In that case the bootcamp drivers block access to the cinema display and you need to use the apple control panel to adjust brightness.
      Brightness controller was designed to avoid installing bootcamp drivers on a normal none Apple PC.

      Also the HID information you posted is for a Touchpad not a display :-)
      If you need me to add a new screen type please create an issue in the issue tracker and post the HID information there.

      Regards
      Jens Schumacher

      Delete
  10. Hello,

    Thank you for this product. I was actually not looking for a brightness control. My USB ports on my 23" HD Cinema are not working.... but I found your site and would LOVE to have bright control in my Win 7, 64bit environment.

    Questions:
    1)I downloaded and when I tried to run it asked what program I wanted to use to open the file. Obviously not an exe. What is wrong?
    2) Will this program bring my USB ports back to life?

    Thank you.

    ReplyDelete
    Replies
    1. Ehm. I think there is something wrong with the file you downloaded. The Download version 1.4.4 link points to https://bitbucket.org/Gensplejs/publicfiles/downloads/Brightness%20Controller%201.4.4%20Setup.exe

      When you download it that should give you an executable installer named "Brightness Controller 1.4.4 Setup.exe".
      And yes that is a .exe file.

      If you can't download the file correctly please let me know and i will upload it to another location.

      As to your second question it is very unlikely that my program will affect the usb ports on the monitor.

      Regards
      Jens Schumacher

      Delete
  11. Hi. I have loved this program. I just downloaded the update and now it doesn't work anymore. I have tried to uninstall, reinstall, and even revert to an earlier version that worked fine. Every time I run the program now, I get the following error:

    System.Windows.Markup.XamlParseException: The invocation of the constructor on type 'BrightnessController.MainWindow' that matches the specified binding constraints threw an exception. ---> System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
    at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)
    at Microsoft.Win32.RegistryKey.SetValue(String name, Object value, RegistryValueKind valueKind)
    at BrightnessController.MainWindow..ctor()
    --- End of inner exception stack trace ---
    at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
    at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
    at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
    at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
    at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
    at System.Windows.Application.DoStartup()
    at System.Windows.Application.<.ctor>b__1(Object unused)
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
    at System.Windows.Threading.DispatcherOperation.InvokeImpl()
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    at System.Windows.Threading.DispatcherOperation.Invoke()
    at System.Windows.Threading.Dispatcher.ProcessQueue()
    at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
    at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
    at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
    at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
    at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
    at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
    at System.Windows.Application.RunInternal(Window window)
    at BrightnessController.App.Main()

    ReplyDelete
    Replies
    1. I can't reproduce the bug on my system. But i will upload a debug build that you can test in a few days. It will have the same bug but the exceptions will have line numbers so i can narrow down where the problem is originating.

      Delete
    2. Hi again.

      Please follow and respond to this issue regarding your problem with startup crashes.
      https://bitbucket.org/Gensplejs/brightnesscontroller/issue/21/crash-during-application-startup

      Regards
      Jens Schumacher.

      Delete
  12. Great program! I was looking for this for a long time and I have finally found it. Unfortunately, when I try to run the program it does not recognize my display showing "unable to detect apple display" i have made sure also that it is connected to the usb port as instructed. If it help, I'm using Windows 8 64 bit. Please help!

    ReplyDelete
  13. I forgot to mention I am using 23" Apple Cinema Display (Acrylic frame)

    ReplyDelete
    Replies
    1. Do you have any apple bootcamp drivers or the apple control running while trying to use brightness controller?

      If not then please go to "help -> gather hid information" and check if it detects anything.

      Delete
    2. This comment has been removed by the author.

      Delete
    3. I have created an issue in the issue tracker.
      https://bitbucket.org/Gensplejs/brightnesscontroller/issue/20/problem-connecting-to-23-apple-cinema

      You can post the result from the "help -> gather hid information" function there.

      Delete
    4. I will post it there, thanks! simultaneous post ><

      Delete
  14. Btw, most of your files to download need to be renamed from Brightness to "Brightness.exe" in order for my Win7 64-bit to recognize how to open them. I think the 1.01 was the latest one that showed up as an .exe file right away, the newer versions needed renaming.

    ReplyDelete
    Replies
    1. What he said ^^

      My win7 does not recognize the file

      Delete
    2. Hmmmm. Very strange.
      I have tested the download with Chrome, IE and FF now and i get a .exe file no matter what...

      I can upload the file to an alternative site if you like....

      Delete
  15. Thanks for this excellent tool. How does the auto-brightness actually work? A cool feature would be presets ;)

    ReplyDelete
    Replies
    1. Auto brightness is only supported on some displays like the 27" cinema display and the 27" thunderbolt display.
      They have ambient light sensors and turn the brightness up and down without my tool doing anything.
      All i tell the monitor to do is turn auto brightness on and off.

      About presets... Brightness controller currently has 3 configurable presets with configurable shortcut keys in the options menu. Do you need more than that?

      Delete
  16. Thanks again for this great tool.

    ReplyDelete
  17. Hi Jens,

    I tried it with a 24 cinema display and works wonders.

    Also, i have a dual screen it does changes the brightness on both screen simultaneously which is pretty awesome. Something i would like to be added is the power function for individual screens. Sometimes i just need one monitor turned on but i cant just have one unless i unplug it from the pc (which is my quick fix so far) Would that be possible?

    Thanks.

    ReplyDelete
    Replies
    1. I have found no options for turning off a display in the USB device so i have no real way of controlling what displays are turned off.
      Brightness controller uses built in windows power saving API's and just tells windows to turn off the displays. So even if i could target a specific display windows would turn it back on at the first user interaction.

      However. As you mentioned the display will turn off if it has no signal from the PC. So my best advice is to unplug it :-( or maybe take a long look at what options windows or your gfx driver has?

      If you press "Win+p" you should get a quick option to change your multi monitor setup in windows. If you set it to only output on one monitor it might turn off the second one.

      I can look into creating multi monitor profiles and switching between them but that is really outside the scope for this tool and i think there are a lot of other tools for this.

      Delete
  18. Third party software like ultramon might also be useful for creating multi monitor profiles and switching between them
    http://www.realtimesoft.com/ultramon/

    Can you report back if setting windows to only use one monitor turns off the second cinema display?

    ReplyDelete