VC++调节显示器的亮度SetDeviceGammaRamp

出处:http://www.nirsoft.net/vc/change_screen_brightness.html

SetDeviceGammaRamp API函数位于Gdi32.ll中,接收一个256*3 RGB值的数组。
增加这个数组中的值会使屏幕更亮,而减少这些值会使屏幕变暗。
可以通过增加或减少的红/绿/蓝成分的值来显示影响。例如:在所有RGB值中增加蓝色分量将增加整个显示的蓝色。
下面的类封装调用GetDeviceGammaRamp和SetDeviceGammaRamp,并设置屏幕的亮度,提供setbrightness功能。

C++ GammaRamp.h


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
#ifndef GAMMARAMP_H_

#define GAMMARAMP_H_

/*

CGammaRamp class

Encapsulates the Gamma Ramp API and changes the brightness of

the entire screen.

Written by Nir Sofer.

http://www.nirsoft.net

*/

class CGammaRamp

{

protected:

HMODULE hGDI32;

HDC hScreenDC;

typedef BOOL (WINAPI *Type_GetDeviceGammaRamp)(HDC hDC, LPVOID lpRamp);

typedef BOOL (WINAPI *Type_SetDeviceGammaRamp)(HDC hDC, LPVOID lpRamp);

Type_GetDeviceGammaRamp pGetDeviceGammaRamp;

Type_SetDeviceGammaRamp pSetDeviceGammaRamp;

public:

CGammaRamp();

~CGammaRamp();

BOOL LoadLibrary();

void FreeLibrary();

BOOL LoadLibraryIfNeeded();

BOOL SetDeviceGammaRamp(HDC hDC, LPVOID lpRamp);

BOOL GetDeviceGammaRamp(HDC hDC, LPVOID lpRamp);

BOOL SetBrightness(HDC hDC, WORD wBrightness);

};

#endif//#ifndef GAMMARAMP_H_

C++ GammaRamp.cpp


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
 
#include <windows.h>

#include "gammaramp.h"

/*

CGammaRamp class

Encapsulates the Gamma Ramp API and changes the brightness of

the entire screen.

Written by Nir Sofer.

http://www.nirsoft.net

*/

CGammaRamp::CGammaRamp()

{

//Initialize all variables.

hGDI32 = NULL;

hScreenDC = NULL;

pGetDeviceGammaRamp = NULL;

pSetDeviceGammaRamp = NULL;

}

CGammaRamp::~CGammaRamp()

{

FreeLibrary();

}

BOOL CGammaRamp::LoadLibrary()

{

BOOL bReturn = FALSE;

FreeLibrary();

//Load the GDI library.

hGDI32 = ::LoadLibrary("gdi32.dll");

if (hGDI32 != NULL)

{

//Get the addresses of GetDeviceGammaRamp and SetDeviceGammaRamp API functions.

pGetDeviceGammaRamp = (Type_GetDeviceGammaRamp)GetProcAddress(hGDI32, "GetDeviceGammaRamp");

pSetDeviceGammaRamp = (Type_SetDeviceGammaRamp)GetProcAddress(hGDI32, "SetDeviceGammaRamp");

//Return TRUE only if these functions exist.

if (pGetDeviceGammaRamp == NULL || pSetDeviceGammaRamp == NULL)

{

FreeLibrary();

}

else

{

bReturn = TRUE;

}

}

return bReturn;

}

void CGammaRamp::FreeLibrary()

{

//Free the GDI library.

if (hGDI32 != NULL)

{

::FreeLibrary(hGDI32);

hGDI32 = NULL;

}

}

BOOL CGammaRamp::LoadLibraryIfNeeded()

{

BOOL bReturn = FALSE;

if (hGDI32 == NULL)

{

LoadLibrary();

}

if (pGetDeviceGammaRamp != NULL && pSetDeviceGammaRamp != NULL)

{

bReturn = TRUE;

}

return bReturn;

}

BOOL CGammaRamp::SetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)

{

//Call to SetDeviceGammaRamp only if this function is successfully loaded.

if (LoadLibraryIfNeeded())

{

return pSetDeviceGammaRamp(hDC, lpRamp);

}

else

{

return FALSE;

}

}

BOOL CGammaRamp::GetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)

{

//Call to GetDeviceGammaRamp only if this function is successfully loaded.

if (LoadLibraryIfNeeded())

{

return pGetDeviceGammaRamp(hDC, lpRamp);

}

else

{

return FALSE;

}

}

BOOL CGammaRamp::SetBrightness(HDC hDC, WORD wBrightness)

{

/*

Changes the brightness of the entire screen.

This function may not work properly in some video cards.

The wBrightness value should be a number between 0 and 255.

128 = Regular brightness

above 128 = brighter

below 128 = darker

If hDC is NULL, SetBrightness automatically load and release

the display device context for you.

*/

BOOL bReturn = FALSE;

HDC hGammaDC = hDC;

//Load the display device context of the entire screen if hDC is NULL.

if (hDC == NULL)

hGammaDC = GetDC(NULL);

if (hGammaDC != NULL)

{

//Generate the 256-colors array for the specified wBrightness value.

WORD GammaArray[3][256];

for (int iIndex = 0; iIndex < 256; iIndex++)

{

int iArrayValue = iIndex * (wBrightness + 128);

if (iArrayValue > 65535)

{

iArrayValue = 65535;

}

GammaArray[0][iIndex] =

GammaArray[1][iIndex] =

GammaArray[2][iIndex] = (WORD)iArrayValue;

}

//Set the GammaArray values into the display device context.

bReturn = SetDeviceGammaRamp(hGammaDC, GammaArray);

}

if (hDC == NULL)

{

ReleaseDC(NULL, hGammaDC);

}

return bReturn;

}

C++ Main.cpp


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
#include <Windows.h>

#include "gammaramp.h"

int WINAPI WinMain(

HINSTANCE hInstance,        // handle to current instance

HINSTANCE hPrevInstance,    // handle to previous instance

LPSTR lpCmdLine,                 // command line

int nCmdShow                      // show state

)

{

//Example for changing the brightness with CGammaRamp class:

//Be aware that this exmaple may not work properly in all Video cards.

CGammaRamp GammaRamp;

//Make the screen darker:

GammaRamp.SetBrightness(NULL, 64);

//Wait 3 seconds:

Sleep(3000);

//Return back to normal:

GammaRamp.SetBrightness(NULL, 128);

return 0;

}

时间: 2024-11-09 02:04:35

VC++调节显示器的亮度SetDeviceGammaRamp的相关文章

android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)

写UI布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" andr

ubuntu 设置显示器的亮度

ubuntu电脑重新启动后,亮度都变成了最亮.似乎也没胡地方可以设置.只好通过写个脚本来做这个事了. # -*- coding: utf-8 -*- import dbus bus = dbus.SessionBus() proxy = bus.get_object('org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/Power') iface=dbus.Interface( proxy, dbus_interface='org.gnom

[转发]dsdt解决睡眠唤醒死机

登录 注册 首页 热门话题 最新发布 简单模式 详细模式 dsdt解决睡眠唤醒死机 Leave a reply 首先,感谢x5115x提供了一个相对比较完整的THINKPAD T410在MAC下的DSDT修改的详细教程!使得很多略有程序代码经验的T410使用者能够自己动手修改DSDT. 在x5115x的帖子中,提到了以下几个修改:1)添加DGTP:2)修改LPC,支持原生电源管理:3)修改RTC,防止CMOS重置:4)添加显卡代码(我用了少量的代码+变色龙自动侦测,使得机器可以支持VGA的镜像输

Android 亮度调节

最近在做一个App的设置项,亮度调节.真正做时,发现Android亮度调节比预想要复杂一些.其实目前网上已有不少这方面的资料,但有些博文具有一定误导性.在此将这块内容按照自己理解整理一下. 整体上看,Android亮度调节分为三个层次,分别是:Android系统亮度调节.Android App亮度调节和Android当前屏幕(Window)亮度调节. 1.Android系统亮度调节 Android系统亮度调节全局性最高,常见于系统设置中的亮度设置项.Android中提供了获取和设置系统亮度值(“

Android开发之调节屏幕亮度

在播放器中,我们常常可以看到这么一个设计,就是用户通过在屏幕的某个部分上下滑动就可以调节屏幕的亮度,在某个部分上下滑动就可以调节播放的音量.而左右滑动就可以调节播放的进度. 今天,我要说一下亮度的调节.其实主要是通过设置View的属性实现的. public void onLightChange(float delta, int distance, Window window) { WindowManager.LayoutParams params = window.getAttributes()

长臂猿显示器支架产品火爆促销中

现在许多商务人士以及白领都会采用笔记本电脑作为办公的首选工具,凭借着小巧的体积,笔记本电脑拥有非常出色的便携性.不过受到笔记本电脑自身体积的限制,其显示器屏幕的尺寸也比较小,为了更加舒适的办公并增加办公效率,不少用户都会选择笔记本支架的方式. 使用笔记本支架可以任意的调节显示器的高度,使得笔记本电脑的办公用户可以更加方面的浏览网页.处理文字信息等等,成为高端商业的使用品牌. 长臂猿一直在不断创新的基础上面突出了笔记本支架,上面可以放置笔记本电脑,这样可以有效的节省空间,使用一体式USB集成式.

[ZigBee] 13、ZigBee基础阶段性回顾与加深理解——用定时器1产生PWM来控制LED亮度(七色灯)

引言:PWM对于很多软件工程师可能又熟悉又陌生,以PWM调节LED亮度为例,其本质是在每个周期都偷工减料一些,整体表现出LED欠压亮度不同的效果.像大家看到的七色彩灯其原理也类似,只是用3路PWM分别控制红.绿.蓝三种颜色的灯输出亮度,再结合混色原理表现出丰富多彩的炫光效果~ 写在前面:前十几篇介绍了CC2530的一些外设的基本用法,接下来几篇拿几个例子回顾并加深一下之前的知识点,上面引言是普及.下面高能预警! 第一个例子:用定时器1产生PWM来控制LED亮度 我们在<[ZigBee] 5.Zi

实现类似美图秀秀里面的属性增强调节——设计模式练习

1.在界面下方有3个按钮,分别是亮度.色彩度.饱和度 2. 点击按钮,选中一个,上面用一个滚动条显示亮度.色彩度.饱和度的值,三个用同一个滚动条. 3.选中后,滑动滚动条,调节当前选择的亮度.色彩度.饱和度.(不用真调节相机,假实现即可,但需要考虑将来可能会实现,要预留实现接口) 4.考虑一下,上面的需求可能会变化的情况,比如可能会增加减少要调节的项目,每个调节项目调节时触发的动作会修改,代码要能够很方便扩展.请采用适合的设计模式解决 思路&设计: 首先,根据题目要求,按下不同的按钮,调节不同的

Ubuntu窗口大小调节方法

Description: 在Vmware Workstation 11上安装了Ubuntu 10.0,画面显示如下所示: Ubuntu系统的屏幕太小.调整方法:调节显示器分辨率即可,下图是将分辨率调节为1900*1080的结果.