[Ex] Modifier la luminosité de l'écran

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
toto1515
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 08 déc. 2010 17:18
Localisation : Corse
Status : Hors ligne

[Ex] Modifier la luminosité de l'écran

#1

Message par toto1515 » lun. 23 sept. 2019 19:20

Bonjour,
après avoir pas mal fouillé sur le web pour trouver un moyen de modifier la luminosité de l'écran de mon PC, j'ai créé ce script qui utilise "Powershell".

#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur:         François
Fonction du Script :    Modification de la luminosité de l'écran via powershell.
1- on récupère les infos du mode d'alimentation ('PowerShell.exe (Get-Ciminstance -Namespace root/WMI -ClassName WmiMonitorBrightness)')
2- on lit la valeur en cours de la luminosité (CurrentBrightness).
3- on affiche la GUI, le slider étant initié avec cette valeur .
4- lors du déplacement du slider, on récupère la valeur et on lance une commande powershell qui modifie la luminosité 'PowerShell.exe (Get-WmiObject -Namespace root/WMI -Class WmiMonitorBrightnessMethods).WmiSetBrightness(1,' & $new_val & ')'
C'est tout.
(Testé sous windows 8)
#ce ----------------------------------------------------------------------------
Opt("mustdeclarevars", 1)

#Region les constantes
        Global Const $debug = 0
        Global Const $WS_POPUP = 0x80000000
        Global Const $WS_DLGFRAME = 0x00400000
        Global Const $TBS_AUTOTICKS = 0x0001
        Global Const $TBS_VERT = 0x0002
        Global Const $TBS_BOTH = 0x0008
        Global Const $SS_CENTER = 0x01
        Global Const $SS_CENTERIMAGE = 0x0200
        Global Const $SS_SUNKEN = 0x1000
        Global Const $STDOUT_CHILD = 0x2
        Global Const $sCommand_deb = 'PowerShell.exe (Get-WmiObject -Namespace root/WMI -Class WmiMonitorBrightnessMethods).WmiSetBrightness(1,'
        Global Const $sCommand_fin = ')'
        Global Const $scommand_ini = 'PowerShell.exe (Get-Ciminstance -Namespace root/WMI -ClassName WmiMonitorBrightness)'
#EndRegion les constantes

#Region mes variables
        Global $aArray
        Global $Btn_quitter
        Global $ini_val
        Global $iPID
        Global $m_label
        Global $m_slider
        Global $ma_forme
        Global $mon_string = ""
        Global $new_val
        Global $nMsg
        Global $sCommand
        Global $sOutput
#EndRegion mes variables

#Region création de la forme
        $ma_forme = GUICreate("Brightness", 105, 485, -1, 70, BitOR($WS_DLGFRAME, $WS_POPUP))
        $m_slider = GUICtrlCreateSlider(30, 10, 40, 400, BitOR($TBS_AUTOTICKS, $TBS_VERT, $TBS_BOTH))
        GUICtrlSetLimit(-1, 100, 0)
        GUICtrlCreateLabel("100", 10, 16, 20, 20, $SS_CENTER)
        GUICtrlCreateLabel("0", 10, 390, 20, 20, $SS_CENTER)
        GUICtrlCreateLabel("100", 72, 16, 20, 20, $SS_CENTER)
        GUICtrlCreateLabel("0", 72, 390, 20, 20, $SS_CENTER)
        $m_label = GUICtrlCreateLabel("", 15, 420, 75, 20, BitOR($SS_SUNKEN, $SS_CENTERIMAGE, $SS_CENTER))
        $Btn_quitter = GUICtrlCreateButton("Quitter", 15, 450, 75, 25)
#EndRegion création de la forme

#Region programme principal
        ; on récupère les infos du mode d'alimentation
        $iPID = Run(@ComSpec & ' /C ' & $scommand_ini, '', @SW_HIDE, $STDOUT_CHILD)
        ProcessWaitClose($iPID)
        $sOutput = StdoutRead($iPID)
        If $debug = 1 Then ConsoleWrite($sOutput & @CRLF)
        $aArray = StringSplit(StringTrimRight(StringStripCR($sOutput), StringLen(@CRLF)), @CRLF)
        If @error Then
                MsgBox(0, "", "Il y a eu une erreur avec powercfg.")
                Exit
        EndIf
        ; on recherche la ligne correspondant à la luminosité
        For $i = 1 To $aArray[0]
                If StringInStr($aArray[$i], "CurrentBrightness") Then
                        If $debug = 1 Then ConsoleWrite($aArray[$i] & @CRLF)
                        $mon_string = $aArray[$i]
                EndIf
        Next
        If $mon_string = "" Then
                MsgBox(0, "Erreur", "La luminosité n'a pas été trouvée !!!")
                Exit
        EndIf
        $ini_val = StringRegExpReplace($mon_string, "[\s\:A-Za-z]*", "")
        If $debug = 1 Then ConsoleWrite("$ini_val=" & $ini_val & @CRLF)
        ; on affiche la forme
        GUICtrlSetData($m_label, $ini_val & " %")
        GUICtrlSetData($m_slider, 100 - $ini_val)
        GUISetState(@SW_SHOW, $ma_forme)
        While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $Btn_quitter
                                Exit
                        Case $m_slider
                                $new_val = 100 - GUICtrlRead($m_slider)
                                If $debug = 1 Then ConsoleWrite("$new_val=" & $new_val & @CRLF)
                                GUICtrlSetData($m_label, $new_val & " %")
                                ; on modifie la luminosité
                                $sCommand = $sCommand_deb & $new_val & $sCommand_fin
                                Run($sCommand, "", @SW_HIDE)
                EndSwitch
        WEnd
#EndRegion programme principal

Je précise que je suis sous windows 8.

Cordialement
Autoit 3.3.14.5 - Scite 4.1.0 - Windows 8

Avatar du membre
toto1515
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 08 déc. 2010 17:18
Localisation : Corse
Status : Hors ligne

Re: [Ex] Modifier la luminosité de l'écran

#2

Message par toto1515 » lun. 23 sept. 2019 20:14

Re bonjour,
j'ai poursuivi mes investigations et j'ai un autre script qui, cette fois, utilise 'powercfg'.

#cs ----------------------------------------------------------------------------
        AutoIt Version : 3.3.14.5
        Auteur:         François
        Fonction du Script :
        Modification de la luminosité de l'écran via powershell.
        1- on récupère les infos du mode d'alimentation ('powercfg /q')
        2- on récupère la valeur du mode, de l'affichage, de la luminosité de l'affichage, l'index de la luminosité.
        3- on affiche la GUI, le slider étant initié avec cette valeur .
        4- lors du déplacement du slider, on récupère la valeur et on lance une commande powershell qui modifie la luminosité
        'powercfg -setacvalueindex $mon_mode $mon_affichage $mon_luminosite $new_val'
        puis
        'powercfg /S $mon_mode' pour ré-activer le mode

        C'est tout.
        (Testé sous windows 8)
#ce ----------------------------------------------------------------------------
Opt("mustdeclarevars", 1)

#Region les constantes
        Global Const $debug = 1
        Global Const $WS_POPUP = 0x80000000
        Global Const $WS_DLGFRAME = 0x00400000
        Global Const $TBS_AUTOTICKS = 0x0001
        Global Const $TBS_VERT = 0x0002
        Global Const $TBS_BOTH = 0x0008
        Global Const $SS_CENTER = 0x01
        Global Const $SS_CENTERIMAGE = 0x0200
        Global Const $SS_SUNKEN = 0x1000
        Global Const $STDOUT_CHILD = 0x2
        Global Const $sCommand_deb = 'powercfg -setacvalueindex ' ;  pour le courant continu -> 'powercfg -setdcvalueindex '
        Global Const $sCommand_fin = 'powercfg /S '
        Global Const $scommand_ini = 'powercfg /q'
        Global Const $string_mode_search = "GUID du mode de gestion de l'alimentation"
        Global Const $string_affichage_search = "(Affichage)"
        Global Const $string_luminosite_search = "\(Luminosit. de l\'affichage\)"
        Global Const $string_index = "Index actuel du param.tre de courant alternatif" ; pour le courant continu -> Global Const $string_index = "Index actuel du param.tre de courant continu"
#EndRegion les constantes

#Region mes variables
        Global $aArray
        Global $Btn_quitter
        Global $i_deb = 1
        Global $ini_val = 99999
        Global $iPID
        Global $m_label
        Global $m_slider
        Global $ma_forme
        Global $mon_affichage = ""
        Global $mon_affichage_tmp = ""
        Global $mon_index_tmp = ""
        Global $mon_luminosite = ""
        Global $mon_luminosite_tmp = ""
        Global $mon_mode = ""
        Global $mon_mode_tmp = ""
        Global $mon_string_affichage = ""
        Global $mon_string_index = ""
        GLobal $mon_string_luminosite = ""
        Global $mon_string_mode = ""
        Global $new_val
        Global $nMsg
        Global $sCommand
        Global $sOutput
#EndRegion mes variables

#Region création de la forme
        $ma_forme = GUICreate("Brightness", 105, 485, -1, 70, BitOR($WS_DLGFRAME, $WS_POPUP))
        $m_slider = GUICtrlCreateSlider(30, 10, 40, 400, BitOR($TBS_AUTOTICKS, $TBS_VERT, $TBS_BOTH))
        GUICtrlSetLimit(-1, 100, 0)
        GUICtrlCreateLabel("100", 10, 16, 20, 20, $SS_CENTER)
        GUICtrlCreateLabel("0", 10, 390, 20, 20, $SS_CENTER)
        GUICtrlCreateLabel("100", 72, 16, 20, 20, $SS_CENTER)
        GUICtrlCreateLabel("0", 72, 390, 20, 20, $SS_CENTER)
        $m_label = GUICtrlCreateLabel("", 15, 420, 75, 20, BitOR($SS_SUNKEN, $SS_CENTERIMAGE, $SS_CENTER))
        $Btn_quitter = GUICtrlCreateButton("Quitter", 15, 450, 75, 25)
#EndRegion création de la forme

#Region programme principal
        ; on récupère les infos du mode d'alimentation
        $iPID = Run(@ComSpec & ' /C ' & $scommand_ini, '', @SW_HIDE, $STDOUT_CHILD)
        ProcessWaitClose($iPID)
        $sOutput = StdoutRead($iPID)
        ;If $debug = 1 Then ConsoleWrite($sOutput & @CRLF)
        $aArray = StringSplit(StringTrimRight(StringStripCR($sOutput), StringLen(@CRLF)), @CRLF)
        If @error Then
                MsgBox(0, "", "Il y a eu une erreur avec powercfg.")
                Exit
        EndIf

        For $i = $i_deb To $aArray[0]
                If StringInStr($aArray[$i], $string_mode_search) Then
                        ;If $debug = 1 Then ConsoleWrite($aArray[$i] & @CRLF)
                        $mon_string_mode = $aArray[$i]
                        $i_deb = $i
                        ExitLoop
                EndIf
        Next
        For $i = $i_deb To $aArray[0]
                If StringInStr($aArray[$i], $string_affichage_search) Then
                        ;If $debug = 1 Then ConsoleWrite($aArray[$i] & @CRLF)
                        $mon_string_affichage = $aArray[$i]
                        $i_deb = $i
                        ExitLoop
                EndIf
        Next

        For $i = $i_deb To $aArray[0]
                If StringRegExp($aArray[$i], $string_luminosite_search) Then
                        ;If $debug = 1 Then ConsoleWrite($aArray[$i] & @CRLF)
                        $mon_string_luminosite = $aArray[$i]
                        $i_deb = $i
                        ExitLoop
                EndIf
        Next

        For $i = $i_deb To $aArray[0]
                If StringRegExp($aArray[$i], $string_index) Then
                        $mon_string_index = $aArray[$i]
                        $i_deb = $i
                        ExitLoop
                EndIf
        Next

        If $debug = 1 Then ConsoleWrite("$mon_string_mode=" & $mon_string_mode & @CRLF)
        If $debug = 1 Then ConsoleWrite("$mon_string_affichage=" & $mon_string_affichage & @CRLF)
        If $debug = 1 Then ConsoleWrite("$mon_string_luminosite=" & $mon_string_luminosite & @CRLF)
        If $debug = 1 Then ConsoleWrite("$mon_string_index=" & $mon_string_index & @CRLF)

        $mon_mode_tmp = StringStripWS(StringMid($mon_string_mode, StringInStr($mon_string_mode, ":") + 1), 1)
        If $debug = 1 Then ConsoleWrite($mon_mode_tmp & @CRLF)
        $mon_mode = StringLeft($mon_mode_tmp, StringInStr($mon_mode_tmp, " ") - 1)
        If $debug = 1 Then ConsoleWrite("$mon_mode=" & $mon_mode & @CRLF)

        $mon_affichage_tmp = StringStripWS(StringMid($mon_string_affichage, StringInStr($mon_string_affichage, ":") + 1), 1)
        If $debug = 1 Then ConsoleWrite($mon_affichage_tmp & @CRLF)
        $mon_affichage = StringLeft($mon_affichage_tmp, StringInStr($mon_affichage_tmp, " ") - 1)
        If $debug = 1 Then ConsoleWrite("$mon_affichage=" & $mon_affichage & @CRLF)

        $mon_luminosite_tmp = StringStripWS(StringMid($mon_string_luminosite, StringInStr($mon_string_luminosite, ":") + 1), 1)
        If $debug = 1 Then ConsoleWrite($mon_luminosite_tmp & @CRLF)
        $mon_luminosite = StringLeft($mon_luminosite_tmp, StringInStr($mon_luminosite_tmp, " ") - 1)
        If $debug = 1 Then ConsoleWrite("$mon_luminosite=" & $mon_luminosite & @CRLF)

        $mon_index_tmp = StringStripWS(StringMid($mon_string_index, StringInStr($mon_string_index, ":") + 1), 1)
        If $debug = 1 Then ConsoleWrite($mon_index_tmp & @CRLF)
        $ini_val = Dec(StringReplace($mon_index_tmp, "0x", ""))
        If $debug = 1 Then ConsoleWrite($ini_val & @CRLF)

        If $ini_val = 99999 Then
                MsgBox(0, "Erreur", "La luminosité n'a pas été trouvée !!!")
                Exit
        EndIf

        If $debug = 1 Then ConsoleWrite("$ini_val=" & $ini_val & @CRLF)
        ; on affiche la forme
        GUICtrlSetData($m_label, $ini_val & " %")
        GUICtrlSetData($m_slider, 100 - $ini_val)
        GUISetState(@SW_SHOW, $ma_forme)
        While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $Btn_quitter
                                Exit
                        Case $m_slider
                                $new_val = 100 - GUICtrlRead($m_slider)
                                If $debug = 1 Then ConsoleWrite("$new_val=" & $new_val & @CRLF)
                                GUICtrlSetData($m_label, $new_val & " %")
                                ; on modifie la luminosité
                                $sCommand = $sCommand_deb & $mon_mode & " " & $mon_affichage & " " & $mon_luminosite & " " & $new_val
                                Run($sCommand, "", @SW_HIDE)
                                $sCommand = $sCommand_fin & $mon_mode
                                Run($sCommand, "", @SW_HIDE)
                EndSwitch
        WEnd
#EndRegion programme principal

Voilà, voilà...
Autoit 3.3.14.5 - Scite 4.1.0 - Windows 8

Avatar du membre
toto1515
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 08 déc. 2010 17:18
Localisation : Corse
Status : Hors ligne

Re: [Ex] Modifier la luminosité de l'écran

#3

Message par toto1515 » mar. 24 sept. 2019 16:22

Bonjour,
une dernière évolution à mon script...
J'ai créé un UDF "display_brightness.au3" utilisant "powercfg " contenant 2 fonctions : _get_brightness_infos et _set_brightness.

; #FUNCTION# =====================================================================================
; Name...........: _get_brightness_infos
; Description ...: Récupère des informations concernant le mode d'alimentation
; Syntax.........: _get_brightness_infos()
; Parameters ....: Aucun
; Return values .:
;        Succès : Array
;       $array[0] : GUID du mode d'alimentaion
;       $array[1] : GUID de l'affichage
;       $array[2] : GUID de la luminosité de l'affichage
;       $array[3] : index de la luminosité
;      Echec : défini @error et retourne une info sur l'erreur
;================================================================================================

et

; #FUNCTION# ====================================================================================
; Name...........: _set_brightness
; Description ...: Modifie la luminosité de l'écran
; Syntax.........: _set_brightness($la_valeur)
; Parameters ....: la valeur de la luminosité comprise entre 0 et 100
; Return values .: Succès : Rien
;                         Echec : défini @error et retourne une info sur l'erreur
;================================================================================================

Note 1 : ça fonctionne en français car powercgf donne les résultats de ses commandes en français.

Note 2 : il y a une fonction "_m_BatteryQuery" pour déterminer si le PC est sur secteur ou sur batterie.

Pour info, j'ai un service "Dell WMI Service" (C:\Program Files (x86)\DELL\DELLOSD\DellOSDService.exe) qui doit être démarré pour que ça fonctionne. En arrêtant ce service, la modification de la luminosité ne fonctionne plus, même en passant par le panneau de configuration/options d'alimentation...
C'est bon à savoir.

Toto1515

:D
Fichiers joints
display_brightness.au3
L'UDF "display_brightness.au3"
(10.7 Kio) Téléchargé 13 fois
display_brightness.au3
L'UDF "display_brightness.au3"
(10.7 Kio) Téléchargé 13 fois
modif luminosité.au3
Un exemple d'utilisation avec une GUI + slider.
(2.62 Kio) Téléchargé 15 fois
modif luminosité.au3
Un exemple d'utilisation avec une GUI + slider.
(2.62 Kio) Téléchargé 15 fois
Autoit 3.3.14.5 - Scite 4.1.0 - Windows 8

Avatar du membre
arrkhan
Modérateur
Modérateur
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : En ligne

Re: [Ex] Modifier la luminosité de l'écran

#4

Message par arrkhan » lun. 07 oct. 2019 20:13

Bonjour toto1515,

Si vous êtes toujours en recherche d'une solution full AutoIt, je vous conseille de vous renseigner à savoir si vos moniteurs supportent le protocole DDC/CI
Les termes suivants devraient également vous aiguiller dans votre recherche : VESA MCCS et VCP Feature

► Afficher le texteSolution de facilité :

Bonne continuation à vous !

Répondre