在任务栏上用滚轮控制屏幕亮度

用到以下项目:

Class_Monitor:https://github.com/jNizM/Class_Monitor

Beautifultooltip:https://github.com/telppa/BeautifulToolTip

文件结构

使用方法:鼠标移动到任务栏,然后使用滚轮调节屏幕亮度。

 

  1 ; FileInstall, BTT.ahk, %A_ScriptDir%, 1
  2 ; FileInstall, Gdip_All.ahk, %A_ScriptDir%, 1
  3 ; FileInstall, NonNull.ahk, %A_ScriptDir%, 1
  4 
  5 #If (MouseIsOveRControl("MSTaskListWClass1"))
  6 i := Monitor.GetBrightness().Current
  7 Wheelup::
  8 i += 5
  9 changeCurrent(i)
 10 Return
 11 WheelDown::
 12 i -= 5
 13 changeCurrent(i)
 14 Return
 15 MouseIsOveRControl(ControlClass){
 16 MouseGetPos,,,,thisControl
 17 IfEqual,thisControl,%Controlclass%
 18 return true
 19 }
 20 #If
 21 changeCurrent(i){
 22 Monitor.SetBrightness(i)
 23 btt(Monitor.GetBrightness().Current,,,,"Style2",{Transparent:v})
 24 Sleep, 150
 25 btt()
 26 Return
 27 }
 28 
 29 
 30 ; ===============================================================================================================================
 31 ; AutoHotkey wrapper for Monitor Configuration API Functions
 32 ;
 33 ; Author ....: jNizM
 34 ; Released ..: 2015-05-26
 35 ; Modified ..: 2020-07-29
 36 ; Github ....: https://github.com/jNizM/Class_Monitor
 37 ; Forum .....: https://www.autohotkey.com/boards/viewtopic.php?f=6&t=62955
 38 ; ===============================================================================================================================
 39 
 40 
 41 class Monitor
 42 {
 43 
 44     ; ===== PUBLIC METHODS ======================================================================================================
 45 
 46     GetBrightness(Display := "")
 47     {
 48         if (hMonitor := this.GetMonitorHandle(Display))
 49         {
 50             PhysicalMonitors := this.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor)
 51             hPhysicalMonitor := this.GetPhysicalMonitorsFromHMONITOR(hMonitor, PhysicalMonitors, PHYSICAL_MONITOR)
 52             Brightness := this.GetMonitorBrightness(hPhysicalMonitor)
 53             this.DestroyPhysicalMonitors(PhysicalMonitors, PHYSICAL_MONITOR)
 54             return Brightness
 55         }
 56         return false
 57     }
 58 
 59 
 60     GetContrast(Display := "")
 61     {
 62         if (hMonitor := this.GetMonitorHandle(Display))
 63         {
 64             PhysicalMonitors := this.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor)
 65             hPhysicalMonitor := this.GetPhysicalMonitorsFromHMONITOR(hMonitor, PhysicalMonitors, PHYSICAL_MONITOR)
 66             Contrast := this.GetMonitorContrast(hPhysicalMonitor)
 67             this.DestroyPhysicalMonitors(PhysicalMonitors, PHYSICAL_MONITOR)
 68             return Contrast
 69         }
 70         return false
 71     }
 72 
 73 
 74     GetGammaRamp(Display := "")
 75     {
 76         if (DisplayName := this.GetDisplayName(Display))
 77         {
 78             if (hDC := this.CreateDC(DisplayName))
 79             {
 80                 GammaRamp := this.GetDeviceGammaRamp(hDC)
 81                 this.DeleteDC(hDC)
 82                 return GammaRamp
 83             }
 84             this.DeleteDC(hDC)
 85         }
 86         return false
 87     }
 88 
 89 
 90     RestoreFactoryDefault(Display := "")
 91     {
 92         if (hMonitor := this.GetMonitorHandle(Display))
 93         {
 94             PhysicalMonitors := this.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor)
 95             hPhysicalMonitor := this.GetPhysicalMonitorsFromHMONITOR(hMonitor, PhysicalMonitors, PHYSICAL_MONITOR)
 96             this.RestoreMonitorFactoryDefaults(hPhysicalMonitor)
 97             this.DestroyPhysicalMonitors(PhysicalMonitors, PHYSICAL_MONITOR)
 98             return true
 99         }
100         return false
101     }
102 
103 
104     SetBrightness(Brightness, Display := "")
105     {
106         if (hMonitor := this.GetMonitorHandle(Display))
107         {
108             PhysicalMonitors := this.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor)
109             hPhysicalMonitor := this.GetPhysicalMonitorsFromHMONITOR(hMonitor, PhysicalMonitors, PHYSICAL_MONITOR)
110             GetBrightness    := this.GetMonitorBrightness(hPhysicalMonitor)
111             Brightness := (Brightness < GetBrightness["Minimum"]) ? GetBrightness["Minimum"]
112                         : (Brightness > GetBrightness["Maximum"]) ? GetBrightness["Maximum"]
113                         : (Brightness)
114             this.SetMonitorBrightness(hPhysicalMonitor, Brightness)
115             this.DestroyPhysicalMonitors(PhysicalMonitors, PHYSICAL_MONITOR)
116             return Brightness
117         }
118         return false
119     }
120 
121 
122     SetContrast(Contrast, Display := "")
123     {
124         if (hMonitor := this.GetMonitorHandle(Display))
125         {
126             PhysicalMonitors := this.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor)
127             hPhysicalMonitor := this.GetPhysicalMonitorsFromHMONITOR(hMonitor, PhysicalMonitors, PHYSICAL_MONITOR)
128             GetContrast      := this.GetMonitorContrast(hPhysicalMonitor)
129             Contrast := (Contrast < GetContrast["Minimum"]) ? GetContrast["Minimum"]
130                       : (Contrast > GetContrast["Maximum"]) ? GetContrast["Maximum"]
131                       : (Contrast)
132             this.SetMonitorContrast(hPhysicalMonitor, Contrast)
133             this.DestroyPhysicalMonitors(PhysicalMonitors, PHYSICAL_MONITOR)
134             return Contrast
135         }
136         return false
137     }
138 
139 
140     SetGammaRamp(Red, Green, Blue, Display := "")
141     {
142         if (DisplayName := this.GetDisplayName(Display))
143         {
144             if (hDC := this.CreateDC(DisplayName))
145             {
146                 this.SetDeviceGammaRamp(hDC, Red, Green, Blue)
147                 this.DeleteDC(hDC)
148                 return true
149             }
150             this.DeleteDC(hDC)
151         }
152         return false
153     }
154     
155 
156     ; ===== PRIVATE METHODS =====================================================================================================
157 
158     CreateDC(DisplayName)
159     {
160         if (hDC := DllCall("gdi32\CreateDC", "str", DisplayName, "ptr", 0, "ptr", 0, "ptr", 0, "ptr"))
161             return hDC
162         return false
163     }
164 
165 
166     DeleteDC(hDC)
167     {
168         if (DllCall("gdi32\DeleteDC", "ptr", hDC))
169             return true
170         return false
171     }
172 
173 
174     DestroyPhysicalMonitors(PhysicalMonitorArraySize, PHYSICAL_MONITOR)
175     {
176         if (DllCall("dxva2\DestroyPhysicalMonitors", "uint", PhysicalMonitorArraySize, "ptr", &PHYSICAL_MONITOR))
177             return true
178         return false
179     }
180 
181 
182     EnumDisplayMonitors(hMonitor := "")
183     {
184         static EnumProc := RegisterCallback(Monitor.EnumProc)
185         static DisplayMonitors := {}
186 
187         if (MonitorNumber = "")
188             DisplayMonitors := {}
189 
190         if (DisplayMonitors.MaxIndex() = "")
191             if (DllCall("user32\EnumDisplayMonitors", "ptr", 0, "ptr", 0, "ptr", EnumProc, "ptr", &DisplayMonitors, "uint"))
192                 return (MonitorNumber = "") ? DisplayMonitors : DisplayMonitors.HasKey(MonitorNumber) ? DisplayMonitors[MonitorNumber] : false
193         return false
194     }
195 
196 
197     EnumProc(hDC, RECT, ObjectAddr)
198     {
199         DisplayMonitors := Object(ObjectAddr)
200         MonitorInfo := Monitor.GetMonitorInfo(this)
201         DisplayMonitors.Push(MonitorInfo)
202         return true
203     }
204 
205 
206     GetDeviceGammaRamp(hMonitor)
207     {
208         VarSetCapacity(GAMMA_RAMP, 1536, 0)
209         if (DllCall("gdi32\GetDeviceGammaRamp", "ptr", hMonitor, "ptr", &GAMMA_RAMP))
210         {
211             GammaRamp := []
212             GammaRamp["Red"]   := NumGet(GAMMA_RAMP,        2, "ushort") - 128
213             GammaRamp["Green"] := NumGet(GAMMA_RAMP,  512 + 2, "ushort") - 128
214             GammaRamp["Blue"]  := NumGet(GAMMA_RAMP, 1024 + 2, "ushort") - 128
215             return GammaRamp
216         }
217         return false
218     }
219 
220 
221     GetDisplayName(Display := "")
222     {
223         DisplayName := ""
224 
225         if (Enum := this.EnumDisplayMonitors()) && (Display != "")
226         {
227             for k, Mon in Enum
228                 if (InStr(Mon["Name"], Display))
229                     DisplayName := Mon["Name"]
230         }
231         if (DisplayName = "")
232             if (hMonitor := this.MonitorFromWindow())
233                 DisplayName := this.GetMonitorInfo(hMonitor)["Name"]
234 
235         return DisplayName
236     }
237 
238 
239     GetMonitorBrightness(hMonitor)
240     {
241         if (DllCall("dxva2\GetMonitorBrightness", "ptr", hMonitor, "uint*", Minimum, "uint*", Current, "uint*", Maximum))
242             return { "Minimum": Minimum, "Current": Current, "Maximum": Maximum }
243         return false
244     }
245 
246 
247     GetMonitorContrast(hMonitor)
248     {
249         if (DllCall("dxva2\GetMonitorContrast", "ptr", hMonitor, "uint*", Minimum, "uint*", Current, "uint*", Maximum))
250             return { "Minimum": Minimum, "Current": Current, "Maximum": Maximum }
251         return false
252     }
253 
254 
255     GetMonitorHandle(Display := "")
256     {
257         hMonitor := 0
258 
259         if (Enum := this.EnumDisplayMonitors()) && (Display != "")
260         {
261             for k, Mon in Enum
262                 if (InStr(Mon["Name"], Display))
263                     hMonitor := Mon["Handle"]
264         }
265         if !(hMonitor)
266             hMonitor := this.MonitorFromWindow()
267 
268         return hMonitor
269     }
270 
271 
272     GetMonitorInfo(hMonitor)
273     {
274         NumPut(VarSetCapacity(MONITORINFOEX, 40 + (32 << !!A_IsUnicode)), MONITORINFOEX, 0, "uint")
275         if (DllCall("user32\GetMonitorInfo", "ptr", hMonitor, "ptr", &MONITORINFOEX))
276         {
277             MONITORINFO := []
278             MONITORINFO["Handle"]   := hMonitor
279             MONITORINFO["Name"]     := Name := StrGet(&MONITORINFOEX + 40, 32)
280             MONITORINFO["Number"]   := RegExReplace(Name, ".*(\d+)$", "$1")
281             MONITORINFO["Left"]     := NumGet(MONITORINFOEX,  4, "int")
282             MONITORINFO["Top"]      := NumGet(MONITORINFOEX,  8, "int")
283             MONITORINFO["Right"]    := NumGet(MONITORINFOEX, 12, "int")
284             MONITORINFO["Bottom"]   := NumGet(MONITORINFOEX, 16, "int")
285             MONITORINFO["WALeft"]   := NumGet(MONITORINFOEX, 20, "int")
286             MONITORINFO["WATop"]    := NumGet(MONITORINFOEX, 24, "int")
287             MONITORINFO["WARight"]  := NumGet(MONITORINFOEX, 28, "int")
288             MONITORINFO["WABottom"] := NumGet(MONITORINFOEX, 32, "int")
289             MONITORINFO["Primary"]  := NumGet(MONITORINFOEX, 36, "uint")
290             return MONITORINFO
291         }
292         return false
293     }
294 
295 
296     GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor)
297     {
298         if (DllCall("dxva2\GetNumberOfPhysicalMonitorsFromHMONITOR", "ptr", hMonitor, "uint*", NumberOfPhysicalMonitors))
299             return NumberOfPhysicalMonitors
300         return false
301     }
302 
303 
304     GetPhysicalMonitorsFromHMONITOR(hMonitor, PhysicalMonitorArraySize, ByRef PHYSICAL_MONITOR)
305     {
306         VarSetCapacity(PHYSICAL_MONITOR, (A_PtrSize + 256) * PhysicalMonitorArraySize, 0)
307         if (DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR", "ptr", hMonitor, "uint", PhysicalMonitorArraySize, "ptr", &PHYSICAL_MONITOR))
308             return NumGet(PHYSICAL_MONITOR, 0, "ptr")
309         return false
310     }
311 
312 
313     MonitorFromWindow(hWindow := 0)
314     {
315         static MONITOR_DEFAULTTOPRIMARY := 0x00000001
316 
317         if (hMonitor := DllCall("user32\MonitorFromWindow", "ptr", hWindow, "uint", MONITOR_DEFAULTTOPRIMARY))
318             return hMonitor
319         return false
320     }
321 
322 
323     RestoreMonitorFactoryDefaults(hMonitor)
324     {
325         if (DllCall("dxva2\RestoreMonitorFactoryDefaults", "ptr", hMonitor))
326             return false
327         return true
328     }
329 
330 
331     SetDeviceGammaRamp(hMonitor, Red, Green, Blue)
332     {
333         loop % VarSetCapacity(GAMMA_RAMP, 1536, 0) / 6
334         {
335             NumPut((r := (red   + 128) * (A_Index - 1)) > 65535 ? 65535 : r, GAMMA_RAMP,        2 * (A_Index - 1), "ushort")
336             NumPut((g := (green + 128) * (A_Index - 1)) > 65535 ? 65535 : g, GAMMA_RAMP,  512 + 2 * (A_Index - 1), "ushort")
337             NumPut((b := (blue  + 128) * (A_Index - 1)) > 65535 ? 65535 : b, GAMMA_RAMP, 1024 + 2 * (A_Index - 1), "ushort")
338         }
339         if (DllCall("gdi32\SetDeviceGammaRamp", "ptr", hMonitor, "ptr", &GAMMA_RAMP))
340             return true
341         return false
342     }
343 
344 
345     SetMonitorBrightness(hMonitor, Brightness)
346     {
347         if (DllCall("dxva2\SetMonitorBrightness", "ptr", hMonitor, "uint", Brightness))
348             return true
349         return false
350     }
351 
352 
353     SetMonitorContrast(hMonitor, Contrast)
354     {
355         if (DllCall("dxva2\SetMonitorContrast", "ptr", hMonitor, "uint", Contrast))
356             return true
357         return false
358     }
359 
360 }
361 
362 ; ===============================================================================================================================

 

posted @ 2022-09-22 19:52  c/  阅读(148)  评论(0编辑  收藏  举报