C# 设置Windows 7屏幕亮度

发布于 2024-12-16 15:55:16 字数 200 浏览 3 评论 0原文

我想自己调节屏幕亮度。因为 Windows 只允许我在有限的范围内进行调整。我想将显示屏从 0% 调暗到 100%,然后将其关闭/打开。如果Windows可以自动执行(在:x分钟后调暗显示/在:x分钟后关闭显示),那应该是可能的。我尝试了一些通过谷歌找到的资源和课程。但它们都不起作用。

你有没有尝试过这个或者你能给我推荐任何工作代码吗?

感谢您的回复。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心如狂蝶 2024-12-23 15:55:16

您可以使用WmiSetBrightness方法:

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;
            }
        }
    }
}

有关更多详细信息,请查看WDDM 中的亮度控制监视器配置函数

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

萌无敌 2024-12-23 15:55:16

尝试这样:

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
    }
}

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
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文