Adjust screen brightness using C#

前端 未结 6 1581
面向向阳花
面向向阳花 2020-12-01 11:13

How do I adjust the screen brightness in C#?

6条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-01 12:08

    I tested the below code on my tablet and laptops work. You need to add a reference System.Management, find in the NuGet. This changes the actual brightness of the monitor.

    //get the actual percentage of brightness
    static int GetCurrentBrightness()
    {
        //define scope (namespace)
        System.Management.ManagementScope s = new System.Management.ManagementScope("root\\WMI");
        //define query
        System.Management.SelectQuery q = new System.Management.SelectQuery("WmiMonitorBrightness");
        //output current brightness
        System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(s, q);
        System.Management.ManagementObjectCollection moc = mos.Get();
        //store result
        byte curBrightness = 0;
        foreach (System.Management.ManagementObject o in moc)
        {
            curBrightness = (byte)o.GetPropertyValue("CurrentBrightness");
            break; //only work on the first object
        }
        moc.Dispose();
        mos.Dispose();
        return (int)curBrightness;
    }
    
    //array of valid brightness values in percent
    static byte[] GetBrightnessLevels()
    {
        //define scope (namespace)
        System.Management.ManagementScope s = new System.Management.ManagementScope("root\\WMI");
        //define query
        System.Management.SelectQuery q = new System.Management.SelectQuery("WmiMonitorBrightness");
        //output current brightness
        System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(s, q);
        byte[] BrightnessLevels = new byte[0];
        try
        {
            System.Management.ManagementObjectCollection moc = mos.Get();
            //store result
            foreach (System.Management.ManagementObject o in moc)
            {
                BrightnessLevels = (byte[])o.GetPropertyValue("Level");
                break; //only work on the first object
            }
            moc.Dispose();
            mos.Dispose();
    
        }
        catch (Exception)
        {
            MessageBox.Show("Sorry, Your System does not support this brightness control...");
        }
        return BrightnessLevels;
    }
    
    static void SetBrightness(byte targetBrightness)
    {
        //define scope (namespace)
        System.Management.ManagementScope s = new System.Management.ManagementScope("root\\WMI");
        //define query
        System.Management.SelectQuery q = new System.Management.SelectQuery("WmiMonitorBrightnessMethods");
        //output current brightness
        System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(s, q);
        System.Management.ManagementObjectCollection moc = mos.Get();
        foreach (System.Management.ManagementObject o in moc)
        {
            o.InvokeMethod("WmiSetBrightness", new Object[] { UInt32.MaxValue, targetBrightness });
            //note the reversed order - won't work otherwise!
            break; //only work on the first object
        }
    
        moc.Dispose();
        mos.Dispose();
    }
    

    Above Got from: https://www.codeproject.com/Articles/236898/Screen-Brightness-Control-for-Laptops-and-Tablets

提交回复
热议问题