Détecter changement état d'alimentation PC portable ou tablette [Résolu]

jerlo11 91 Messages postés mardi 19 mai 2015Date d'inscription 12 octobre 2018 Dernière intervention - 16 sept. 2016 à 14:20 - Dernière réponse : vb95 1684 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention
- 17 sept. 2016 à 13:18
Bonjour à toutes et tous,
J'essaie de me faire un petit programme pour détecter en boucle un éventuel changement d'état de l'alimentation (pc portable ou tablette Windows) mais sans succès...

Après de nombreuses recherches sur internet je me permet de poster ici pour essayer d'avancer sur un bout de code mais étant débutant je n'ai rien trouvé de concret.

Voici mon code actuel que j'ai mis dans l'évenement Form_Load car ne sachant pour ou le placer :
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim psBattery As PowerStatus = SystemInformation.PowerStatus
Dim perFull As Single = psBattery.PowerLineStatus

Dim sps As BatteryStatus.SYSTEM_POWER_STATUS = BatteryStatus.GetStatus

lbl_AC.Text = String.Concat("Power AC : ", [Enum].GetName(GetType(BatteryStatus.ACLineStatus), sps.ACLineStatus))

Select Case sps.ACLineStatus
Case 0
lbl_etatalim.Text = "Statut de l'alimentation : Débranchée du secteur " & vbCrLf & "Niveau de la batterie :" & perFull * 100 & "%"
Case 1
lbl_etatalim.Text = "Statut de l'alimentation : Branchée sur secteur " & vbCrLf & "Niveau de la batterie :" & perFull * 100 & "%"
Case 255
lbl_etatalim.Text = "Statut de l'alimentation : Inconnu"
End Select


Select Case sps.BatteryFlag
Case 1
'La batterie est haute"
Case 2
'"La batterie est basse"
Case 4
'"La batterie est critique"
Case 8
'"La batterie est en charge"
Case 128
'"Statut batterie : Aucune batterie de secours")
Case 255
'("Battery charge status: Unknown Status")
End Select

End Sub
End Class

Public Class BatteryStatus
Private Declare Auto Function GetSystemPowerStatus Lib "kernel32.dll" ( _
ByRef lpSystemPowerStatus As SYSTEM_POWER_STATUS) _
As Integer

Public Structure SYSTEM_POWER_STATUS
Public ACLineStatus As ACLineStatus
Public BatteryFlag As BatteryFlag
Public BatteryLifePercent As Byte
Public Reserved1 As Byte
Public BatteryLifeTime As Integer
Public BatteryFullLifeTime As Integer
End Structure

Public Enum BatteryFlag As Byte
High = 1
Low = 2
Critical = 4
Charging = 8
NoSystemBattery = 128
Unknown = 255
End Enum

Public Enum ACLineStatus As Byte
Offline = 0
Online = 1
Unknown = 255
End Enum

Public Shared Function GetStatus() As SYSTEM_POWER_STATUS
Dim SPS As New SYSTEM_POWER_STATUS
GetSystemPowerStatus(SPS)
Return SPS
End Function
End Class



Dans quel événement placer ce code ? faut-il utiliser un Timer pour créer une boucle ?
Est-ce qu'une personne aurai un exemple concret pour m'aider ?

Vous remerciant par avance,
Très cordialement,
Afficher la suite 

Votre réponse

4 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 16 sept. 2016 à 17:47
0
Merci
Bonjour,
Je viens de parcourir dans MSDN la classe SystemInformation et découvre (je ne suis pas vb.nettiste) qu'elle ne connaît aucun évènement.
C'est bien dommage et je le déplore. Le contrôle SysInfo de VB6 connaît nativement, lui, l'évènement PowerStatusChanged.
Je ne suis pas VB.Nettiste (redit). Je pense qu'il va te falloir créer toi-même cet évènement manquant ou un substitut avec timer ...
Commenter la réponse de ucfoutu
vb95 1684 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 16 sept. 2016 à 18:21
Commenter la réponse de vb95
jerlo11 91 Messages postés mardi 19 mai 2015Date d'inscription 12 octobre 2018 Dernière intervention - 17 sept. 2016 à 12:45
0
Merci
Résolu avec 2 Timers qui ce font echo ;)
vb95 1684 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 17 sept. 2016 à 13:18
bonjour jerlo11
Tu es sur un forum de développement et le moins que tu puisses faire c'est d'en faire profiter la communauté
Si tu postais ta solution avec explication et commentaires ce serait la moindre des chose .
Bon weekend
Commenter la réponse de jerlo11

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.