Windows10 에서 모니터의 밝기를 조정하고 싶었습니다.
Windows10 Desktop 뿐만아닌 IoT 버전에서도 적용하고 싶었고, 많은 시행착오끝에 성공했습니다.
아래 소스를 공개합니다.
NuGet에서 System.Management를 설치해주셔야합니다.
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
|
public class MonitorBirghtness
{
protected Thread mThread = null;
protected bool initBirghtness = false;
protected bool needMiniumBirghtness = false;
protected bool needMaxinumBirghtness = false;
protected bool needRecoveryBrightness = false;
protected bool needSetBrightness = false;
protected int setBrightness = 80;
protected int reverseBirghtness = 80;
protected int baseBrightness = 80;
public void bneedMiniumBirghtness() => needMiniumBirghtness = true;
public void bneedRecoveryBrightness() => needRecoveryBrightness = true;
public void ineedSetBrightness(int i)
{
needSetBrightness = true;
setBrightness = i;
}
public MonitorBirghtness(int _baseBrightness)
{
mThread = new Thread(run);
mThread.Start();
baseBrightness = _baseBrightness;
}
protected void run()
{
while (true)
{
try
{
if (!initBirghtness)
{
initBirghtness = true;
SetBrightness((byte)baseBrightness);
}
if (needSetBrightness)
{
needSetBrightness = false;
SetBrightness((byte)setBrightness);
}
if (needMiniumBirghtness)
{
needMiniumBirghtness = false;
reverseBirghtness = baseBrightness;
SetBrightness(0x01);
}
if (needRecoveryBrightness)
{
needRecoveryBrightness = false;
SetBrightness((byte)reverseBirghtness);
}
}
catch (Exception ex)
{
ILog logger = LogManager.GetLogger(this.GetType());
logger.Fatal("Brightness Manager Exception >>> " + ex.ToString() + " -> " + ex.StackTrace);
}
Thread.Sleep(1000);
}
}
//get the actual percentage of brightness
public static int GetCurrentBrightness()
{
//define scope (namespace)
System.Management.ManagementScope s = new System.Management.ManagementScope("root\\WMI");
//define query
System.Management.SelectQuery q = new System.Management.SelectQuery("WmiMonitorBrightness");
//output current brightness
System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(s, q);
System.Management.ManagementObjectCollection moc = mos.Get();
//store result
byte curBrightness = 0;
foreach (System.Management.ManagementObject o in moc)
{
curBrightness = (byte)o.GetPropertyValue("CurrentBrightness");
break; //only work on the first object
}
moc.Dispose();
mos.Dispose();
return (int)curBrightness;
}
//array of valid brightness values in percent
public static byte[] GetBrightnessLevels()
{
//define scope (namespace)
System.Management.ManagementScope s = new System.Management.ManagementScope("root\\WMI");
//define query
System.Management.SelectQuery q = new System.Management.SelectQuery("WmiMonitorBrightness");
//output current brightness
System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(s, q);
byte[] BrightnessLevels = new byte[0];
System.Management.ManagementObjectCollection moc = mos.Get();
//store result
foreach (System.Management.ManagementObject o in moc)
{
BrightnessLevels = (byte[])o.GetPropertyValue("Level");
break; //only work on the first object
}
moc.Dispose();
mos.Dispose();
return BrightnessLevels;
}
protected static void SetBrightness(byte targetBrightness)
{
//define scope (namespace)
System.Management.ManagementScope s = new System.Management.ManagementScope("root\\WMI");
//define query
System.Management.SelectQuery q = new System.Management.SelectQuery("WmiMonitorBrightnessMethods");
//output current brightness
System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(s, q);
System.Management.ManagementObjectCollection moc = mos.Get();
foreach (System.Management.ManagementObject o in moc)
{
o.InvokeMethod("WmiSetBrightness", new object[] { uint.MaxValue, targetBrightness });
//note the reversed order - won't work otherwise!
break; //only work on the first object
}
moc.Dispose();
mos.Dispose();
}
}
|
cs |
setBrightness, reverseBirghtness, baseBrightness 등의 인자에는 1부터 100까지만 허용됩니다.
반응형