2011-11-19 8 views
7

Tôi muốn điều chỉnh độ sáng màn hình bằng chính bản thân mình. Bởi vì Windows cho phép tôi chỉ điều chỉnh trong phạm vi giới hạn. Tôi muốn làm mờ màn hình từ 0 đến 100% và tắt màn hình. Nó sẽ là có thể nếu các cửa sổ nó có thể làm tự động (Dim hiển thị sau: x phút/Tắt hiển thị sau: x phút). Tôi đã thử một số nguồn và lớp học mà tôi tìm thấy bởi google. Nhưng không ai trong số họ làm việc.C# thiết lập độ sáng màn hình Windows 7

Bạn đã bao giờ thử điều này hay bạn có thể giới thiệu cho tôi bất kỳ mã hoạt động nào không?

Cảm ơn bạn đã trả lời.

Trả lời

15

Bạn có thể sử dụng WmiSetBrightness phương pháp:

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

Để biết thêm chi tiết, xin vui lòng hãy xem Brightness Control in WDDMMonitor Configuration Functions

3

thử nó như thế này:

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

Chỉ hoạt động trên một số máy tính. Và nó đang thay đổi giá trị Gama, nhưng tôi muốn thay đổi giá trị Độ sáng. Giống như trong Windows -> Điều chỉnh độ sáng màn hình (đèn nền của màn hình). – sczdavos

+0

cách sử dụng phương pháp này trong ứng dụng dịch vụ giành chiến thắng? – Butsaty

0

Sử dụng Microsoft API để điều chỉnh độ sáng màn hình. Gọi hàm SetDeviceGammaRamp.

Hãy thử mã này.

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

Tạo ứng dụng biểu mẫu cửa sổ và kéo nút và thanh trượt.

Bạn có thể xem hướng dẫn tại đây: http://www.lattepanda.com/topic-f11t3020.html