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...
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.