这个确实可以改亮度,但是:
1,我外接了显示器,这个程序是两个显示器亮度同时改变,我只想改变扩展输出,实在不行,两个同时改也能接受吧。
2,这个是通过滑块赋值改亮度,而我希望是定时赋值改亮度。我直接赋值亮度却没反应,帮看下我写的为啥没反应
#include <WinAPI.au3>
#include <GUISlider.au3>
Const $WM_HSCROLL = 0x0114 ;定义常量 $WM_HSCROLL = 0x0114
Local $hGUI, $iSlider, $tBuffer, $hDC ,$ld ;声明变量 $hGUI, $iSlider, $tBuffer, $hDC
Global $H = @HOUR ;定义小时
$M = @MIN ;定义分钟
$S = @SEC ;定义秒
If $H>=7 AND $H<10 Then ;早上7到10点,把亮度调为30%
; MsgBox(4096,"", "早退.")
$ld=30
ElseIf $H>=10 AND $H<18 Then ;早上10到下午6点,把亮度调为150%
;MsgBox(4096,"", "还没到时间.")
$ld=150
Else
If $H>=18 AND $H<23 Then ;下午6到晚上11点,把亮度调为255%
; MsgBox(4096,"", "Value might be hexadecimal!")
$ld=255
EndIf
EndIf
$hDC = _WinAPI_GetDC(0) ;检索窗口客户区的显示设备环境句柄
$tBuffer = _GetDisplayBrightness($hDC)
;$hGUI = GUICreate("Set display brightness", 200, 70);创建窗口
;$iSlider = GUICtrlCreateSlider(20, 20, 160, 20) ; 创建滑动条
;_GUICtrlSlider_SetRangeMin(-1, 12) ;设置滑块最小逻辑位置
;_GUICtrlSlider_SetRangeMax(-1, 256) ;设置滑块的最大逻辑位置
;_GUICtrlSlider_SetRange(-1, 12, 256) ;设置滑块最低和最高逻辑位置范围.
;GUICtrlSetData(-1, DllStructGetData($tBuffer, "r", 2)) ;修改控件数据
GUIRegisterMsg($WM_HSCROLL, "_WM_HSCROLL") ;注册 Windows 消息 ID (WM_MSG) 的自定义函数.
GUISetState() ;调整窗口状态,默认显示
Do
Until GUIGetMsg() = -3 ;获取窗口事件消息,不明白这个
$tBuffer = 0
_WinAPI_ReleaseDC(0, $hDC) ;释放设备环境
Func _WM_HSCROLL($hWnd, $iMsg, $iwParam, $ilParam)
Local $iValue =$ld;GUICtrlRead($iSlider) ;读取滑块数据
For $i = 1 To 255
DllStructSetData($tBuffer, "r", $i * $iValue, $i + 1);设置结构元素的数据(结构, 元素, 值[, 索引]))
DllStructSetData($tBuffer, "g", $i * $iValue, $i + 1)
DllStructSetData($tBuffer, "b", $i * $iValue, $i + 1)
Next
_SetDisplayBrightness($hDC, $tBuffer)
EndFunc ;==>_WM_HSCROLL
Func _SetDisplayBrightness($hDC, ByRef $tBuffer)
Local $iResult
$iResult = DllCall("Gdi32.dll", "int", "SetDeviceGammaRamp", "hWnd", $hDC, _
"ptr", DllStructGetPtr($tBuffer))
Return $iResult[0]
EndFunc ;==>_SetDisplayBrightness
Func _GetDisplayBrightness($hDC)
Local $iResult, $tBuffer
$tBuffer = DllStructCreate("short r[256];short g[256];short b[256]")
$iResult = DllCall("Gdi32.dll", "int", "GetDeviceGammaRamp", "hWnd", $hDC, _
"ptr", DllStructGetPtr($tBuffer))
If $iResult[0] = 0 Then $tBuffer = 0
Return $tBuffer
EndFunc ;==>_GetDisplayBrightness
|