C#设置屏幕亮度Windows 7

我希望自己能够实现屏幕亮度。 因为Windows让我只能在有限的范围内调整。 我想将显示从0到100%变暗并关闭/打开它。 它应该是可以自动执行的窗口(Dim显示在:x分钟后/关闭后显示:x分钟)。 我尝试了谷歌发现的一些来源和类。 但他们没有工作。

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

谢谢你的回应。

您可以使用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和监视器配置function中的 亮度控制

试试这样:

 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); ///  /// Apply the selected gamma value to screen ///  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 } } 

使用Microsoft API调整屏幕亮度。 调用SetDeviceGammaRamp函数。

试试这个代码。

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices; namespace brightnesscontrol { public partial class Form1 : Form { [DllImport("gdi32.dll")] private unsafe static extern bool SetDeviceGammaRamp(Int32 hdc, void* ramp); private static bool initialized = false; private static Int32 hdc; private static int a; public Form1() { InitializeComponent(); } private static void InitializeClass() { if (initialized) return; hdc = Graphics.FromHwnd(IntPtr.Zero).GetHdc().ToInt32(); initialized = true; } public static unsafe bool SetBrightness(int brightness) { InitializeClass(); if (brightness > 255) brightness = 255; if (brightness < 0) brightness = 0; short* gArray = stackalloc short[3 * 256]; short* idx = gArray; for (int j = 0; j < 3; j++) { for (int i = 0; i < 256; i++) { int arrayVal = i * (brightness + 128); if (arrayVal > 65535) arrayVal = 65535; *idx = (short)arrayVal; idx++; } } bool retVal = SetDeviceGammaRamp(hdc, gArray); return retVal; } private void trackBar1_Scroll(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { a = trackBar1.Value; SetBrightness(a); } } } 

创建Windows窗体应用程序并拖动按钮和轨迹栏。

您可以在此处查看教程: http : //www.lattepanda.com/topic-f11t3020.html