1 (изменено: InFlames, 2010-01-18 19:07:39)

Тема: AHK: Изменение яркости экрана

Данный скрипт позволяет регулировать яркость экрана. При этом отображается прогресс-бар со значением яркости системы.

Горячие клавиши:
Win+F2 - увеличить яркость
Win+F1 - уменьшить яркость

#NoTrayIcon ; не отображать иконку скрипта в трее
#MaxHotkeysPerInterval 200
#NoEnv  ; Не использовать переменные окружения
#SingleInstance force
SetBatchLines -1

br := 128   ; Яркость в интервале от 0 до 255 (нормальное значение яркости 128)

#F2:: ; увеличить яркость Win + F2
#F1:: ; уменьшить яркость Win + F1

Brght_Step = 8 ; шаг регулировки

; -------------------
; НАЧАЛО КОНФИГУРАЦИИ
; -------------------

; Как долго отображать прогресс-бар (в миллисекундах)
vol_DisplayTime = 1500
; Прозрачность окна (0-255)
vol_TransValue = 200
; Цвет бэкграунда окна
vol_CW = EEEEEE   
vol_Width = 200  ; ширина прогресс-бара
vol_Thick = 20   ; высота прогресс-бара
; Позиция бара
vol_PosX := A_ScreenWidth/2 - vol_Width/2
vol_PosY := A_ScreenHeight/1.8 - vol_Thick/2
; --------------------
; КОНЕЦ КОНФИГУРАЦИИ
; --------------------
vol_BarOptionsMaster = 1:B1 R0-255 ZH%vol_Thick% ZX8 ZY4 W%vol_Width% X%vol_PosX% Y%vol_PosY% CW%vol_CW%


br += (InStr(A_ThisHotkey, "F1") ? -Brght_Step : Brght_Step )
If ( br > 256 )
   br := 256
If ( br < 0)
   br := 0
VarSetCapacity(gr, 512*3)
Loop,   256
{
   If  (nValue:=(br+128)*(A_Index-1))>65535
        nValue:=65535
   NumPut(nValue, gr,      2*(A_Index-1), "Ushort")
   NumPut(nValue, gr,  512+2*(A_Index-1), "Ushort")
   NumPut(nValue, gr, 1024+2*(A_Index-1), "Ushort")
}
hDC := DllCall("GetDC", "Uint", 0)
DllCall("SetDeviceGammaRamp", "Uint", hDC, "Uint", &gr)
DllCall("ReleaseDC", "Uint", 0, "Uint", hDC)


vol_ShowBars:
; Получаем значение яркости, т.к. пользователь или другие программы могли ее изменить
vol_Master := br
if vol_Master <> 128
{
  vol_Colour = Blue   
  vol_Text = Brightness
}
else
{
;  vol_Colour = Red
  vol_Text = Brightness (normal)

}


; Что бы избежать мигания окна, создаем окно только в том случае, если оно не существует
IfWinNotExist, BrightnessOSDxyz
{
    Progress, %vol_BarOptionsMaster%  CB%vol_Colour% CT%vol_Colour%, , %vol_Text%, BrightnessOSDxyz
    WinSet, Transparent, %vol_TransValue%, BrightnessOSDxyz
}

Progress, 1:%vol_Master% , , %vol_Text%
SetTimer, vol_BarOff, %vol_DisplayTime%
return


vol_BarOff:
SetTimer, vol_BarOff, off
Progress, 1:Off
return

2

Re: AHK: Изменение яркости экрана

Для обладателей видеокарт Nvidia яркость системы можно регулировать вызовом функций DLL. Загружаем и читаем документацию. Например, яркость можно регулировать так:
* максимальная:

rundll32.exe NvCpl.dll,dtcfg setbrightness 1 all 125

* минимальная:

rundll32.exe NvCpl.dll,dtcfg setbrightness 1 all -125

* нормальная

rundll32.exe NvCpl.dll,dtcfg setbrightness 1 all 0

Контраст, соответственно, «setcontrast», от «-82» до «82».
Гамма, соответственно, «setgamma», от «0.5» до «6.0».

Сброс:

rundll32.exe NvCpl.dll,dtcfg setdefaults 1 color

«1» — номер монитора, «all» — все каналы.


Если необходимо автоматически увеличивать яркость монитора при открытии определенного окна (например, игра или окно видеопроигрывателя), можно использовать следующий пример. Вместо WINDOW_AHK_CLASS необходимо поставить ahk_class нужного окна.

#SingleInstance force
#NoEnv
#NoTrayIcon

settimer, Gamma, 2000

Gamma:
settimer gamma, off
    WinWaitActive, ahk_class WINDOW_AHK_CLASS
    run rundll32.exe NvCpl.dll`,dtcfg setgamma 1 all 125
    WinWaitNotActive, ahk_class WINDOW_AHK_CLASS
    run rundll32.exe NvCpl.dll`,dtcfg setgamma 1 all 1
    settimer Gamma
return