C# setting screen brightness Windows 7

14,802

Solution 1

You can use the WmiSetBrightness method:

using System.Management;
//...
static void SetBrightness(byte targetBrightness) {
    ManagementScope scope = new ManagementScope("root\\WMI");
    SelectQuery query = new SelectQuery("WmiMonitorBrightnessMethods");
    using(ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) {
        using(ManagementObjectCollection objectCollection = searcher.Get()) {
            foreach(ManagementObject mObj in objectCollection) {
                mObj.InvokeMethod("WmiSetBrightness",
                    new Object[] { UInt32.MaxValue, targetBrightness });
                break;
            }
        }
    }
}

For more details, please take a look at Brightness Control in WDDM and Monitor Configuration Functions

Solution 2

try it like this:

using System;
using System.ComponentModel;
using System.Runtime.InteropServices;

namespace MediaManagerSql.DataAccess.Sql.EntityFramework
{
    public class ScreenBrightness : Component
    {
        private int _gammaValue;
        private RAMP _ramp;

        public ScreenBrightness()
        {
            InitializeComponent();
        }

        public ScreenBrightness(IContainer container)
        {
            container.Add(this);
            InitializeComponent();
        }

        [Description("Brightness Gamma Value")]
        [Category("Brightness")]
        public int SetGammaValue
        {
            get { return _gammaValue; }
            set { _gammaValue = value; }
        }

        [DllImport("gdi32.dll")]
        public static extern bool SetDeviceGammaRamp(IntPtr hDC, ref RAMP lpRamp);
        [DllImport("user32.dll")]
        private static extern IntPtr GetDC(IntPtr hWnd);

        /// <summary>
        /// Apply the selected gamma value to screen
        /// </summary>
        public void ApplyGamma()
        {
            // since gamma value is max 44 ,, we need to take the percentage from this because 
            // it needed from 0 - 100%
            double gValue = _gammaValue;
            gValue = Math.Floor(Convert.ToDouble((gValue/2.27)));

            _gammaValue = Convert.ToInt16(gValue);

            if (_gammaValue != 0)
            {
                _ramp.Red = new ushort[256];
                _ramp.Green = new ushort[256];
                _ramp.Blue = new ushort[256];

                for (int i = 1; i < 256; i++)
                {
                    // gamma is a value between 3 and 44
                    _ramp.Red[i] =
                        _ramp.Green[i] =
                        _ramp.Blue[i] =
                        (ushort)
                        (Math.Min(65535, Math.Max(0, Math.Pow((i + 1)/256.0, (_gammaValue + 5)*0.1)*65535 + 0.5)));
                }

                SetDeviceGammaRamp(GetDC(IntPtr.Zero), ref _ramp);
            }
        }

        #region Nested type: RAMP

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct RAMP
        {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public UInt16[] Red;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public UInt16[] Green;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public UInt16[] Blue;
        }
        #endregion
    }
}
Share:
14,802
sczdavos
Author by

sczdavos

.NET C# Winforms and PHP developer.

Updated on June 07, 2022

Comments

  • sczdavos
    sczdavos almost 2 years

    I want ajust screen brightness by my self. Because Windows lets me only adjusting in limited range. I want dim the display from 0 to 100% and turning it off/on. It should be possible if windows can it do automatically (Dim display after: x minutes/Turn off display after: x minutes). I tried some sources and classes what I found by google. But no of them works.

    Have you ever tried this or can you recommend me any working code?

    Thanks for responds.

  • sczdavos
    sczdavos over 12 years
    It's only working on some PCs. And it's changing Gama value, but I want change Brightness value. Like in Windows -> Adjust screen brightness (backlight of monitor).
  • Butsaty
    Butsaty over 8 years
    how to use this method in win service app?