我可以通过脚本设置显示器的伽马范围吗?

我可以通过脚本设置显示器的伽马范围吗?

我的工作电脑(Windows 7 Pro x64)有双显示器,默认颜色配置文件看起来非常褪色。我通过运行 NVIDIA 控制面板并将伽玛滑块设置为大约 0.50 并应用更改来解决这个问题。效果很好。

问题是我大约有一半的时间都在远程工作,而当我在家时,我会使用远程桌面连接到工作电脑。当我回到办公室时,伽玛设置会重置为默认的褪色级别,尽管控制面板上的伽玛滑块仍为 0.5。

我的“解决方法”是打开控制面板,稍微移动每个显示器的滑块以应用新的伽马设置。这种方法很管用,但每天都要这么做,很烦人。

我看到有人有类似的问题:

nVidia 控制面板在重启后重置 Gamma 设置

我的 Gamma 在待机状态下自动改变

虽然我们遇到了同样的问题,但我还是想编写一个解决方案。理想情况下,我希望在登录时运行一个脚本,强制将我的伽玛设置调整到我想要的位置。

在 Windows 7 中是否有标准命令行方式来应用伽马设置?

答案1

可以使用脚本实用程序(如 AutoIT、C# 和其他编程语言)完成类似操作。gdi32.dll例如,任何可以与之交互的语言都应该能够完成此任务。

以下是 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 ( )

其来源如下: TinyBrightnessControler v 1.0.0.2

将其编译为可以在启动脚本中运行的可执行文件的工作量很小。

相关内容