[.net2] gestionnaire d'alimentation windows

Description

Démonstration d'une source reprenant une bonne partie des fonctions du Gestionnaire d'Alimentation.
(Vous savez comme Propriété d'affichage -> Mise en veille -> Alimentation.)

Bien sur, cette source a été faites avec la précieuse source MSDN http://msdn2.microsoft.com/en-us/library/aa373163.aspx

La classe PowerScheme fait objet de Wrapper des API du Gestionnaire d'Alimentation.
La seconde classe Scheme elle reprend les principales propriétés d'un profil d'alimentation.

La source est commentée aux max. donc pas de problème pour les débutants.

Source / Exemple :


Imports System.Runtime.InteropServices

''' <summary>
''' Classe fournissant des méthodes/propriétés manipulant les Fonctions du Gestionnaire d'Alimentation
''' </summary>
''' <remarks></remarks>
Public Class PowerScheme

    Private m_SchemeCount As Integer = 0
    Private m_SchemeDic As New Dictionary(Of Integer, String())

    ''' <summary>
    ''' Obtient le nombre de profile(s) d'alimentation(s).
    ''' </summary>
    Public ReadOnly Property SchemeCount() As Integer
        Get
            Return m_SchemeCount
        End Get
    End Property

    ''' <summary>
    ''' Obtient le profile actif.
    ''' </summary>
    Public ReadOnly Property CurrentActiveScheme() As String
        Get
            Dim uiActive As UInteger
            NativeMethods.GetActivePwrScheme(uiActive)

            Return m_SchemeDic(uiActive)(0)
        End Get
    End Property

    ''' <summary>
    ''' Obtient une valeur indiquant si la mise en veille prolongée est autorisée
    ''' </summary>
    Public ReadOnly Property HibernateAllowed() As Boolean
        Get
            Return NativeMethods.IsPwrHibernateAllowed
        End Get
    End Property

    ''' <summary>
    ''' Obtient une valeur indiquant si la mise à l'arrêt de l'alimentation est autorisée.
    ''' </summary>
    Public ReadOnly Property ShutdownAllowed() As Boolean
        Get
            Return NativeMethods.IsPwrShutdownAllowed
        End Get
    End Property

    ''' <summary>
    ''' Obtient une valeur indiquant si la mise en veille est autorisée.
    ''' </summary>
    Public ReadOnly Property SuspendAllowed() As Boolean
        Get
            Return NativeMethods.IsPwrSuspendAllowed
        End Get
    End Property

    ''' <summary>
    ''' Obtient une valeur indiquant si la reprise automatique du système est autorisée.
    ''' </summary>
    Public ReadOnly Property SystemResumeAutomatic() As Boolean
        Get
            Return NativeMethods.IsSystemResumeAutomatic
        End Get
    End Property

    ''' <summary>
    ''' Obtient une valeur indiquant si l'utilisateur est autorisé à écrire un profil.
    ''' </summary>
    Public ReadOnly Property WritePwrSchemeAllowed() As Boolean
        Get
            Return NativeMethods.CanUserWritePwrScheme
        End Get
    End Property

    ''' <summary>
    ''' Enumère les profils du Gestionnaire d'Alimentation.
    ''' </summary>
    ''' <returns>Liste des noms des profils.</returns>
    Public Function EnumPwrShemes() As String()

        NativeMethods.EnumPwrSchemes(AddressOf PwrSchemesEnumProcFunction, 0)

        Dim arr As String() = New String(m_SchemeCount - 1) {}

        For i As Integer = 0 To m_SchemeCount - 1
            arr(i) = m_SchemeDic(i)(0)
        Next

        Return arr

    End Function

    ''' <summary>
    ''' Lit un profil du Gestionnaire d'Alimentation.
    ''' </summary>
    ''' <param name="index">Index du profil à lire.</param>
    ''' <returns>Un objet Scheme contenant les infos. du profil.</returns>
    Public Function ReadPwrScheme(ByVal index As Integer, Optional ByVal include_POWER_POLICY As Boolean = False) As Scheme

        Dim PwrPolicy As New POWER_POLICY

        Dim pPwrPolicy As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(GetType(POWER_POLICY))) 'Alloue un espace mémoire dans l'espace non managé

        Dim bread As Boolean = NativeMethods.ReadPwrScheme(index, pPwrPolicy)   'Envois du bloc de données (structure POWER_POLICY) à l'adresse pointée par pPwrPolicy

        'Si lecture du profil OK
        If bread Then

            'Marshal les données non managées dans PwrPolicy
            PwrPolicy = CType(Marshal.PtrToStructure(pPwrPolicy, GetType(POWER_POLICY)), POWER_POLICY)

            Dim sch As New Scheme

            'Initialisation de l'objet Scheme avec les paramètres obtenue dans PwrPolicy
            If include_POWER_POLICY Then

                sch = New Scheme(index, m_SchemeDic(index)(0), m_SchemeDic(index)(1), PwrPolicy.user.VideoTimeoutAc, _
                    PwrPolicy.user.SpindownTimeoutAc, PwrPolicy.user.IdleTimeoutAc, PwrPolicy.user.VideoTimeoutDc, _
                    PwrPolicy.user.SpindownTimeoutDc, PwrPolicy.user.IdleTimeoutDc, PwrPolicy)
            Else

                sch = New Scheme(index, m_SchemeDic(index)(0), m_SchemeDic(index)(1), PwrPolicy.user.VideoTimeoutAc, _
                    PwrPolicy.user.SpindownTimeoutAc, PwrPolicy.user.IdleTimeoutAc, PwrPolicy.user.VideoTimeoutDc, _
                    PwrPolicy.user.SpindownTimeoutDc, PwrPolicy.user.IdleTimeoutDc)
            End If

            Return sch

        Else

            Return Nothing

        End If

    End Function

    ''' <summary>
    ''' Ecrit un nouveau profil dans le Gestionnaire d'Alimentation.
    ''' </summary>
    ''' <param name="newScheme">Paramètre du nouveau profil.</param>
    ''' <returns>True si réussi; False si non.</returns>
    Public Function WritePwrScheme(ByVal newScheme As Scheme) As Boolean

        Dim PwrPolicy As POWER_POLICY = ReadPwrScheme(0, True).PowerPolicy  'Récupère la règle d'alim. (POWSER_POLICY) du profil par défaut

        'Configure les paramètres sur secteur
        PwrPolicy.user.VideoTimeoutAc = newScheme.TurnOffMonitorAC
        PwrPolicy.user.SpindownTimeoutAc = newScheme.TurnOffHardDisksAC
        PwrPolicy.user.IdleTimeoutAc = newScheme.SystemStandbyAC

        'Configure les paramètres sur batteries
        PwrPolicy.user.VideoTimeoutDc = newScheme.TurnOffMonitorDC
        PwrPolicy.user.SpindownTimeoutDc = newScheme.TurnOffHardDisksDC
        PwrPolicy.user.IdleTimeoutDc = newScheme.SystemStandbyDC

        'Ecrit le profil
        Return NativeMethods.WritePwrScheme(newScheme.Index, newScheme.Name, newScheme.Description, PwrPolicy)

    End Function

    ''' <summary>
    ''' Supprime un profil de Gestionnaire d'Alimentation.
    ''' </summary>
    ''' <param name="index">Index du profil.</param>
    ''' <returns>True si réussi; False si non.</returns>
    Public Function DeleteScheme(ByVal index As Integer) As Boolean

        Return NativeMethods.DeletePwrScheme(index)

    End Function

    ''' <summary>
    ''' Fonction callback énumérant les profils d'Alimenations.
    ''' </summary>
    Private Function PwrSchemesEnumProcFunction(ByVal uiIndex As UInteger, ByVal dwName As UInteger, ByVal sName As String, ByVal dwDesc As UInteger, _
    ByVal sDesc As String, ByVal pp As UInteger, ByVal lParam As UInteger) As Boolean

        m_SchemeCount += 1  'Compteur de profil
        m_SchemeDic.Add(Convert.ToInt32(uiIndex), New String() {sName, sDesc})  'Dictionnaire sur l'Index contenant le nom et la description du profil

        Return True

    End Function

End Class

Conclusion :


A vos commentaires, notes...etc :)
Bon dév à tous...

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.