C# 调节显示器亮度

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.Runtime.InteropServices; // 必须引用此项

// 警告:实验此代码可能给你的显示器的显示带来问题 ,花了两个小时查API的用法
//  不过我试过是没有事情的(BS下自己:不是用自己的机子)

namespace  WindowsApplication1
{
    
public partial class Form1 : Form
    
{

        
public Form1()
        
{
            InitializeComponent();
        }


        
private void button1_Click(object sender, EventArgs e)
        
{
            SetGamma(trackBar1.Value);
        }

        [DllImport(
"gdi32.dll")]
        
public static extern int GetDeviceGammaRamp(IntPtr hDC, ref RAMP lpRamp);
        RAMP ramp 
= new RAMP();

        [DllImport(
"gdi32.dll")]
        
public static extern int SetDeviceGammaRamp(IntPtr hDC, ref RAMP lpRamp);

        [DllImport(
"user32.dll")]
        
static extern IntPtr GetDC(IntPtr hWnd);

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

        
void SetGamma(int gamma)
        
{
            ramp.Red 
= new ushort[256];
            ramp.Green 
= new ushort[256];
            ramp.Blue 
= new ushort[256];

            
for (int i = 1; i < 256; i++)
            
{
                
// gamma 必须在3和44之间
                ramp.Red[i] = ramp.Green[i] = ramp.Blue[i] = (ushort)(Math.Min(65535, Math.Max(0, Math.Pow((i + 1/ 256.0, gamma * 0.1* 65535 + 0.5)));
            }

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


    }

}
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值