Search code examples
.netwinapibrightness

What API call would I use to change brightness of laptop (.NET)?


I have Windows Server 2008 installed on a Sony laptop and the brightness control doesn't work. I'd like to write a program to allow me to change it.

Currently what I have to do is open the Power control panel, click advanced settings, and fight through so many UAC boxes that anybody watching me must think I'm completely crazy.

I just want a simple little program to do it but I don't know what API to call.


Solution

  • I looked up John Rudy's link to WmiSetBrightness in MSDN and came up with this:

    ManagementClass mclass = new ManagementClass("WmiMonitorBrightnessMethods");
    mclass.Scope = new ManagementScope(@"\\.\root\wmi");
    ManagementObjectCollection instances = mclass.GetInstances();
    
    // I assume you get one instance per monitor
    foreach(ManagementObject instance in instances)
    {
        ulong timeout = 1; // in seconds
        ushort brightness = 50; // in percent
        object[] args = new object[] { timeout, brightness };
        instance.InvokeMethod("WmiSetBrightness", args);
    }
    

    Note: ManagementClass, ManagementObjectCollection, and ManagementObject all implement IDisposable. You should call Dispose() or use "using" to avoid leaking resources.