Что нового

Узнать/Изменить яркость дисплея

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Здравствуйте, Как можно Узнать/Изменить яркость дисплея? Уровень яркости(Подсветки).

Заранее спасибо!
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Возможно, этот код подойдет:

Код:
#NoTrayIcon
#include <WindowsConstants.au3> 
HotKeySet ("^{DOWN}", "_1")
HotKeySet ("^{UP}", "_2")
HotKeySet ("{F4}", "normal")
HotKeySet ("{F11}", "ende")

$rgb = 128

$GUI = GUICreate("", 90, 30, -1, -1, BitOR($WS_POPUP, $WS_BORDER))
GUISetState(@SW_HIDE, $GUI)
$Label = GUICtrlCreateLabel("", 1, 1, 90, 30)
GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xB9E1F1)

Func _2 ()
    if $rgb < 286 Then
        $rgb = $rgb + 10
        _SetGamma($rgb, $rgb, $rgb)
	EndIf
sleep(1000)	
GUISetState(@SW_HIDE, $GUI)
EndFunc

Func _1 ()
    if $rgb > 0 Then
        $rgb =$rgb - 10
        _SetGamma ($rgb, $rgb, $rgb)
    EndIf
sleep(1000)	
GUISetState(@SW_HIDE, $GUI)
EndFunc

Func normal ()
    $rgb = 128
    _SetGamma ($rgb, $rgb, $rgb)
 sleep(1000)		
	GUISetState(@SW_HIDE, $GUI)
EndFunc

Func ende ()
    exit
EndFunc

While 1
    Sleep (100)
WEnd

Func _SetGamma($vRed=128,$vGreen=128,$vBlue=128)
  GUISetState(@SW_SHOW, $GUI)
  WinSetTrans ($GUI, "",160 )
if $rgb=128 then
GUICtrlSetData($Label, $rgb&" "&"Norm")
else
GUICtrlSetData($Label, $rgb)  
endif
   Local $n_ramp,$rVar,$gVar,$bVar,$Ret,$i,$dc
    If $vRed < 0 or $vRed > 386 then 
        SetError(1)
        Return -1 ;Invalid Red value
    EndIf
    If $vGreen < 0 or $vGreen > 386 then 
        SetError(2)
        Return -1 ;Invalid Green value
    EndIf
    If $vBlue < 0 or $vBlue > 386 then 
        SetError(3)
        Return -1 ;Invalid Blue value
    EndIf
    $dc = DLLCall("user32.dll","int","GetDC","hwnd",0)
    $n_ramp = DllStructCreate("short[" & (256*3) & "]")
    For $i = 0 to 256
            $rVar = $i * ($vRed + 128)
            If $rVar > 65535 then $rVar = 65535
            $gVar = $i * ($vGreen + 128)
            If $gVar > 65535 then $gVar = 65535
            $bVar = $i * ($vBlue + 128)
            If $bVar > 65535 then $bVar = 65535
            
            DllStructSetData($n_ramp,1,Int($rVar),$i) ;red
            DllStructSetData($n_ramp,1,Int($gVar),$i+256) ;green
            DllStructSetData($n_ramp,1,Int($bVar),$i+512) ;blue
    Next
     $ret = DLLCall("gdi32.dll","int","SetDeviceGammaRamp", _
    "int",$dc[0],"ptr",DllStructGetPtr($n_Ramp))
    $dc = 0
    $n_Ramp = 0
EndFunc

Хотя, похоже, это на основе того, на который дал ссылку Zaramot :whistle:
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Код:
#Include <WinAPIEx.au3>

SetDisplayGamma(0)
Sleep(3000)
SetDisplayGamma()

Func SetDisplayGamma($Gamma = 128)
   
   Local $iGammaRamp[256][3], $iRange, $hDC, $aRet
	  
   For $i = 0 To 255
      $iRange = ($i * ($Gamma + 128))
      If ($iRange > 65535) Then $iRange = 65535
	  For $y = 0 To 2
         $iGammaRamp[$i][$y] = $iRange
      Next
   Next  
   
   $hDC = _WinAPI_GetDC(0)
   $aRet = _WinAPI_SetDeviceGammaRamp($hDC, $iGammaRamp)
   If (@error) Or (Not $aRet) Then
	  SetError(@error, @extended, 0)
   EndIf	  
   _WinAPI_DeleteDC($hDC)
   Return $aRet
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Этот код изменяет LUT видеоадаптера, а не яркость подсветки. Как результат слетает калибровка + вы не сможете увеличить яркость относительно уже установленной на мониторе. Здесь нужна утилита, которая может управлять монитором по DDC (см. в сторону mControl).

Лично у меня стоит монитор Apple + родная утилита из Boot Camp'а.
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
А автоитом такое намудрить нельзя? У меня нетбук, через FN + F5 Можно прибавлять, когда прибавляю программа стандартная показывает уровень... Можно такое на автоите сделать?)
 

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Вверх

Тоже интересует данный вопрос.

Кстати, в Win7 в кратких настройках электропитания есть ползунок, отвечающий за уровень яркости подсветки дисплея ноута. Значит, все-таки, как-то можно данный трюк проделать на автоите?
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Есть такая прога - Nircmd, управление компом через командную строку
В ее справке видел что-то про изменение яркости.
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Хотелось бы сделать это без сторонних утилит.
 
Верх