2 votes

Puis-je définir la plage gamma de mon écran à partir d'un script ?

Mon PC de travail (Windows 7 Pro x64) a deux moniteurs et un profil de couleur par défaut très terne. Je contourne ce problème en exécutant le Panneau de configuration NVIDIA et en réglant le curseur gamma à environ 0,50 et en appliquant les modifications. Ça marche super bien.

Le problème est que je travaille à distance environ la moitié du temps, et lorsque je suis chez moi, j'utilise le Bureau à distance pour me connecter au PC de travail. Quand je reviens au bureau, les paramètres gamma se réinitialisent à leurs niveaux par défaut, terne, même si le curseur gamma du panneau de contrôle est toujours à 0,5.

Ma "solution" est d'ouvrir le panneau de contrôle et de déplacer légèrement le curseur pour chaque moniteur afin d'appliquer de nouveaux paramètres gamma. Ça fonctionne mais c'est très ennuyeux de devoir le faire tous les jours.

Je vois des gens avec des problèmes similaires :

Le Panneau de configuration NVIDIA réinitialise le réglage du gamma après le redémarrage

Mon gamma change automatiquement en sortant de la veille

Malgré que nous ayons le même problème, je suis intéressé par la création d'un script pour y remédier. Idéalement, j'aimerais qu'un script s'exécute à la connexion et force mes paramètres gamma là où je veux qu'ils soient.

Y a-t-il un moyen standard en ligne de commande d'appliquer des paramètres gamma dans Windows 7 ?

2voto

zackrspv Points 1873

Il est possible de faire quelque chose comme ça en utilisant des utilitaires de script tels que AutoIT, C# et d'autres langages de programmation. N'importe quel langage pouvant interagir avec gdi32.dll, par exemple, devrait être capable d'accomplir cette tâche.

Voici un exemple trouvé pour 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()

La source de ceci peut être trouvée ici: TinyBrightnessControler v 1.0.0.2

il serait très peu de travail de compiler cela dans un fichier exécutable pouvant s'exécuter dans un script de démarrage.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X