Posso definir o intervalo gama do meu monitor a partir de um script?

0

Meu PC de trabalho (Windows 7 Pro x64) tem dois monitores e um perfil de cores padrão muito desbotado. Eu contorno isso executando o NVIDIA Control Panel e configurando o controle deslizante gamma para cerca de 0,50 e aplicando as alterações. Funciona muito bem.

O problema é que eu trabalho remotamente na metade do tempo e, quando estou em casa, uso a Área de Trabalho Remota para me conectar ao PC do trabalho. Quando eu volto para o escritório, as configurações de gama são redefinidas para os níveis padrão e desbotados, embora o controle deslizante gamma do painel de controle ainda esteja em 0,5.

Meu "conserto" é abrir o painel de controle e mover o controle deslizante de cada monitor sempre tão ligeiramente para aplicar novas configurações de gama. Funciona, mas é muito chato ter que fazer todos os dias.

Eu vejo pessoas com problemas semelhantes:

O nVidia Control Panel redefine a configuração de Gama após a reinicialização

Meu Gamma muda automaticamente saindo do modo de espera

Embora tenhamos o mesmo problema, estou interessado em criar uma solução para isso. Idealmente, gostaria que um script fosse executado no login que forçaria minhas configurações de gama para onde eu quiser.

Existe uma maneira padrão de linha de comando para aplicar configurações de gama no Windows 7?

    
por Stefan Mohr 20.09.2011 / 17:52

1 resposta

1

É possível fazer algo assim usando utilitários de script como AutoIT, C # e outras linguagens de programação. Qualquer linguagem que possa interagir com gdi32.dll , por exemplo, deve ser capaz de realizar essa tarefa.

Veja um exemplo encontrado para o AutoIt:

Func _SetGamma ( $vRed=128, $vGreen=128, $vBlue=128 )
    Local $n_ramp, $rVar, $gVar, $bVar, $Ret, $i, $dc
    If $vRed < 0 Or $vRed > 386 Then Return -1
    If $vGreen < 0 Or $vGreen > 386 Then Return -1
    If $vBlue < 0 Or $vBlue > 386 Then Return -1
    $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 ;==> _SetGamma ( )

A fonte para isso pode ser encontrada aqui: TinyBrightnessControler v 1.0.0.2

seria muito pouco trabalho compilá-lo em um arquivo executável que possa ser executado em um script de inicialização.

    
por 28.01.2012 / 21:49