none
Luminosité de l'écran avec un trackbar RRS feed

  • Question

  • Bonjour,

    Je voudrais pouvoir contrôler la luminosité de l'écran avec un trackbar.

    Dans un autre thread, j'avais eu une réponse qui utilise Nircmd, mais ne le connaissant pas je n'arrive pas à l'utiliser.

    Cordialement

    JonhSHEPARD

    • Type modifié Shep963213 mardi 17 juillet 2012 16:11
    • Type modifié Shep963213 mercredi 18 juillet 2012 14:04
    dimanche 17 juin 2012 12:36

Réponses

  • Bonjour,

    Voici un code qui permet de changer la luminosité (gamma) de l'écran :

    Imports System.Runtime.InteropServices
    
    Module Module1
    
        Sub Main()
            SetGamma(30)
        End Sub
    
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
        Private Structure RAMP
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Red As UInt16()
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Green As UInt16()
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Blue As UInt16()
        End Structure
    
        <DllImport("gdi32.dll")> _
        Private Function SetDeviceGammaRamp(hDC As IntPtr, ByRef lpRamp As RAMP) As Boolean
        End Function
    
        <DllImport("user32.dll")> _
        Private Function GetDC(hWnd As IntPtr) As IntPtr
        End Function
    
        Private Sub SetGamma(gamma As Integer)
            Dim s_ramp As RAMP = New RAMP()
    
            s_ramp.Red = New UShort(255) {}
            s_ramp.Green = New UShort(255) {}
            s_ramp.Blue = New UShort(255) {}
    
            For i As Integer = 1 To 255
                Dim value As UShort
                value = CUShort(Math.Min(65535, Math.Max(0, Math.Pow((i + 1) / 256.0, gamma * 0.1) * 65535 + 0.5)))
    
                s_ramp.Red(i) = value
                s_ramp.Green(i) = value
                s_ramp.Blue(i) = value
            Next
    
            SetDeviceGammaRamp(GetDC(IntPtr.Zero), s_ramp)
    
        End Sub
    
    
    End Module
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Shep963213 mercredi 18 juillet 2012 14:04
    dimanche 17 juin 2012 14:37
    Modérateur
  • Bonjour,

    Il suffit de mettre un TrackBar et de traiter l'événement ValueChanged. Dans ValueChanged, vous appelez la méthode SetGamma().

    Attention, la valeur gamma doit-être compris entre 3 et 44. Définissez donc les valeurs Minimum et Maximum à votre TrackBar.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Shep963213 mercredi 18 juillet 2012 14:04
    dimanche 17 juin 2012 15:14
    Modérateur
  • Bonjour,

    Comme Gilles vous l'a expliqué, il faut traiter l'évènement ValueChanged.

    Voici donc le code à placer dans Form1 :

      Private Sub TrackBar2_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar2.ValueChanged
            SetGamma(TrackBar2.Value)
      End Sub

    Vous pouvez directement ajuster les propriétés Minimum, Maximum etc via Visual Studio.

    Bonne soirée


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact

    • Marqué comme réponse Shep963213 mercredi 18 juillet 2012 14:05
    lundi 18 juin 2012 16:20
  • Bonjour,

    "pas accepté". C'est-à-dire ? Merci de TOUJOURS indiquer le message d'errreur EXACT que vous avez ainsi que la ligne de code concernée. Cela donne un point de départ qui permet souvent de mieux cerner le problème particulier que de tous les envisager...

    Pour l'instant, je soupçonne que vous tentez d'appeler cette procédure "privée" depuis l'extérieur du module ce qui n'est effectivement pas possible. Si c'est bien le cas changer "Private Sub SetGamma" en "Public Sub SetGamma" pour que cette procédure soit visible de l'extérieur du module.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse Shep963213 mercredi 18 juillet 2012 14:05
    mardi 19 juin 2012 17:53
    Modérateur

Toutes les réponses

  • Bonjour,

    Voici un code qui permet de changer la luminosité (gamma) de l'écran :

    Imports System.Runtime.InteropServices
    
    Module Module1
    
        Sub Main()
            SetGamma(30)
        End Sub
    
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
        Private Structure RAMP
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Red As UInt16()
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Green As UInt16()
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Blue As UInt16()
        End Structure
    
        <DllImport("gdi32.dll")> _
        Private Function SetDeviceGammaRamp(hDC As IntPtr, ByRef lpRamp As RAMP) As Boolean
        End Function
    
        <DllImport("user32.dll")> _
        Private Function GetDC(hWnd As IntPtr) As IntPtr
        End Function
    
        Private Sub SetGamma(gamma As Integer)
            Dim s_ramp As RAMP = New RAMP()
    
            s_ramp.Red = New UShort(255) {}
            s_ramp.Green = New UShort(255) {}
            s_ramp.Blue = New UShort(255) {}
    
            For i As Integer = 1 To 255
                Dim value As UShort
                value = CUShort(Math.Min(65535, Math.Max(0, Math.Pow((i + 1) / 256.0, gamma * 0.1) * 65535 + 0.5)))
    
                s_ramp.Red(i) = value
                s_ramp.Green(i) = value
                s_ramp.Blue(i) = value
            Next
    
            SetDeviceGammaRamp(GetDC(IntPtr.Zero), s_ramp)
    
        End Sub
    
    
    End Module
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Shep963213 mercredi 18 juillet 2012 14:04
    dimanche 17 juin 2012 14:37
    Modérateur
  • Bonjour,

    Je voudrais pouvoir l'utiliser avec un trackbar.

    Cordialement

    dimanche 17 juin 2012 15:06
  • Bonjour,

    Il suffit de mettre un TrackBar et de traiter l'événement ValueChanged. Dans ValueChanged, vous appelez la méthode SetGamma().

    Attention, la valeur gamma doit-être compris entre 3 et 44. Définissez donc les valeurs Minimum et Maximum à votre TrackBar.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Shep963213 mercredi 18 juillet 2012 14:04
    dimanche 17 juin 2012 15:14
    Modérateur
  • Je suis désolé mais le code ne marche pas.
    dimanche 17 juin 2012 15:39
  • Bonjour,

    C'est à dire ?

    Pouvez-vous nous montrer le code que vous avez utilisé ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Shep963213 dimanche 17 juin 2012 17:57
    • Non marqué comme réponse Shep963213 dimanche 17 juin 2012 17:57
    dimanche 17 juin 2012 16:37
    Modérateur
  • Pour le module :

    Imports System.Runtime.InteropServices
    
    Module Module1
    
        Sub Main()
            SetGamma(30)
    Module1.SetGamma(Form1.TrackBar1.Value)
        End Sub
    
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
        Private Structure RAMP
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Red As UInt16()
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Green As UInt16()
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
            Public Blue As UInt16()
        End Structure
    
        <DllImport("gdi32.dll")> _
        Private Function SetDeviceGammaRamp(hDC As IntPtr, ByRef lpRamp As RAMP) As Boolean
        End Function
    
        <DllImport("user32.dll")> _
        Private Function GetDC(hWnd As IntPtr) As IntPtr
        End Function
    
        Private Sub SetGamma(gamma As Integer)
            Dim s_ramp As RAMP = New RAMP()
    
            s_ramp.Red = New UShort(255) {}
            s_ramp.Green = New UShort(255) {}
            s_ramp.Blue = New UShort(255) {}
    
            For i As Integer = 1 To 255
                Dim value As UShort
                value = CUShort(Math.Min(65535, Math.Max(0, Math.Pow((i + 1) / 256.0, gamma * 0.1) * 65535 + 0.5)))
    
                s_ramp.Red(i) = value
                s_ramp.Green(i) = value
                s_ramp.Blue(i) = value
            Next
    
            SetDeviceGammaRamp(GetDC(IntPtr.Zero), s_ramp)
    
        End Sub
    
    
    End Module

    Et pour le form :

    Public Class Form1
    
        Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar2.Scroll
            With TrackBar2
                .Minimum = 3
                .Maximum = 41
                .TickFrequency = 4.1
            End With
        End Sub
    End Class

    dimanche 17 juin 2012 18:40
  • Bonjour,

    Comme Gilles vous l'a expliqué, il faut traiter l'évènement ValueChanged.

    Voici donc le code à placer dans Form1 :

      Private Sub TrackBar2_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar2.ValueChanged
            SetGamma(TrackBar2.Value)
      End Sub

    Vous pouvez directement ajuster les propriétés Minimum, Maximum etc via Visual Studio.

    Bonne soirée


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact

    • Marqué comme réponse Shep963213 mercredi 18 juillet 2012 14:05
    lundi 18 juin 2012 16:20
  • Set gamma n'est pas accepté.
    mardi 19 juin 2012 17:08
  • Bonjour,

    "pas accepté". C'est-à-dire ? Merci de TOUJOURS indiquer le message d'errreur EXACT que vous avez ainsi que la ligne de code concernée. Cela donne un point de départ qui permet souvent de mieux cerner le problème particulier que de tous les envisager...

    Pour l'instant, je soupçonne que vous tentez d'appeler cette procédure "privée" depuis l'extérieur du module ce qui n'est effectivement pas possible. Si c'est bien le cas changer "Private Sub SetGamma" en "Public Sub SetGamma" pour que cette procédure soit visible de l'extérieur du module.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse Shep963213 mercredi 18 juillet 2012 14:05
    mardi 19 juin 2012 17:53
    Modérateur