C#中,如何调节屏幕亮度?

周麻子叔叔 2017-01-17 03:18:54
如图,最近在做一个工程,接触到了要调节亮度,在网上看到了用调节伽马的方法,但我用了过后屏幕出现问题,如果有谁知道的请告诉我怎么做,谢谢!
...全文
17807 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjchang 2020-10-14
  • 打赏
  • 举报
回复
引用 6 楼 JDD1997 的回复:
windows应该没有提供这种功能,
有些显示器的厂家在windows下的控制软件可以调整包括亮度在内的各种参数,但应该都是通过私有协议完成的.

Windows有API, 如楼上所说,就是使用DeviceIoControl。但只能调节内置笔记本的panel,外接显示器是没有这个接口的。
飞天凤凰601 2020-10-10
  • 打赏
  • 举报
回复
收藏,好内容!
JDD1997 2020-10-07
  • 打赏
  • 举报
回复
windows应该没有提供这种功能, 有些显示器的厂家在windows下的控制软件可以调整包括亮度在内的各种参数,但应该都是通过私有协议完成的.
八爻老骥 2020-10-07
  • 打赏
  • 举报
回复
试试这个,使用控制面板接口控制屏幕亮度。
IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS control code (Ntddvdeo.h) - Win32 apps | Microsoft Docs
https://docs.microsoft.com/en-us/windows/win32/power/ioctl-video-set-display-brightness


BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to device
IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS, // dwIoControlCode
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of the input buffer
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
tansion2015 2020-10-06
  • 打赏
  • 举报
回复
引用 1 楼 kellerman616 的回复:
微软自身的有控制屏幕亮度的API,确实是调用SetDeviceGammaRamp()这个函数。这里有个很详细的图文教程你可看看:http://bit.ly/2EkTArr 新建一个窗体应用,拖一个滑条和一个按钮。代码发给你你可以试试:
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); 
       } 
   } 
}
你把滑条的值改一改试试看
这个只是调节对比度或者屏幕颜色,压根不是调亮度,用过,不好用。
  • 打赏
  • 举报
回复
lz不结贴感觉好不厚道
zlxd19 2018-02-07
  • 打赏
  • 举报
回复
也碰到同样的问题 mark
kellerman616 2018-02-06
  • 打赏
  • 举报
回复
微软自身的有控制屏幕亮度的API,确实是调用SetDeviceGammaRamp()这个函数。这里有个很详细的图文教程你可看看:http://bit.ly/2EkTArr 新建一个窗体应用,拖一个滑条和一个按钮。代码发给你你可以试试:
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); 
       } 
   } 
}
你把滑条的值改一改试试看

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧