Capter la mise en veille de l'ordinateur [Résolu]

edwinzap - 20 janv. 2013 à 12:41 - Dernière réponse :  edwinzap
- 17 mars 2013 à 16:12
Bonjour,
Je cherche un moyen pour que mon programme sache que l'ordinateur se met en veille.
J'ai cherché partout, mais je n'ai rien trouvé. Pourtant je pense que windows doit forcément envoyer une information aux programmes en cours d'exécution que l'ordinateur va se mettre en veille (aussi non les plantages seraient nombreux).
Voilà si quelqu'un a une réponse, je le remercierai vivement (car ça fait plusieurs jour que ce problème me trotte dans la tête)
Merci.
Afficher la suite 

23 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 27 janv. 2013 à 18:14
+3
Utile
Bonjour, Un timer, oui, mais accompagné tout simplement de la fonction GetLastInputInfo der la librairie user32 de l'Api de Windows et dont c'est très précisément la vocation.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 27 janv. 2013 à 18:23
+3
Utile
Et la clavier également ? Je ne crois pas !
et des éventuels messages reçus après lancement d'une provédure lente ? Je ne le crois pas non plus !

En tout état de cause ===>> voilà un lien :
Tapez le texte de l'url ici.
on y trouvera le code utilisant cette fonction de l'Api, mais également un code VB.Net testant l'activité.

Le reste ne me regarde pas.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
Utilisateur anonyme - 20 janv. 2013 à 16:53
+2
Utile
Bonsoir,

Comme il est expliqué sur msdn, quand le système se met en veille, il y a simultanément un changement du mode d'alimentation.
Donc tu peux abonner ton application dès son démarrage à ce changement :
AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf Standby

Puis gérer l'événement comme ceci :
Private Sub Standby(ByVal sender As Object, ByVal e As Microsoft.Win32.PowerModeChangedEventArgs)
    If e.Mode = Microsoft.Win32.PowerModes.StatusChange Then
        'ta gestion ici
    End If
End Sub
Commenter la réponse de Utilisateur anonyme
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 20 janv. 2013 à 16:21
0
Utile
Essaie d'intercepter le message WM_POWERBROADCAST via subclassing
et regarde ce qui est envoyé à ton application...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 20 janv. 2013 à 17:20
0
Utile
Oups, pas vu que c'était du .NET

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
0
Utile
Merci banana32, je vais essayer ton code dès que j'aurais le temps (et que j'aurais résolu un autre problème).
Je vous tiendrez au courant.
Encore merci.
Commenter la réponse de edwinzap
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2013 à 21:40
0
Utile
Bonjou,
je suis âgé et risque fort d'être devenu gâteux. Alors Excusez-moi.
Il reste que, si j'ai bien compris, edwinzap est moins intéressé par le fait/constat que l'ordinateur s'est DEJA mis en veille, que par la détermination de ce qu'il VA se mettre en veille (et ce n'est pas pareil du tout, l)...)
A lui de nous dire, donc ...



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
0
Utile
En fait je souhaiterait savoir que l'ordinateur va se mettre en veille pour pouvoir enregistrer auparavant l'heure système (pour connaitre en fait la durée total de la mise en veille)
Voilà j'espère que je me suis mieux exprimé cette fois-ci
Commenter la réponse de edwinzap
0
Utile
Alors voilà j'ai testé le code de banana32. Le code ne fonctionne pas pour ce que je désire faire. Mais par contre, le code suivant fonctionne très bien:
    Private Sub Standby(ByVal sender As Object, ByVal e As Microsoft.Win32.PowerModeChangedEventArgs)
        If e.Mode = Microsoft.Win32.PowerModes.Suspend Then
            'utiliser .suspend pour connaitre le début de la mise en veille
            veilledebut = Now
        End If
        If e.Mode = Microsoft.Win32.PowerModes.Resume Then
            'utiliser .resume pour connaitre la fin de la mise en veille
            veillefin = Now
        End If
    End Sub


En tout cas un très, très grand merci pour cette astuce, banana32.
Et je pense qu'elle ne servira pas qu'à moi!
Commenter la réponse de edwinzap
Utilisateur anonyme - 23 janv. 2013 à 19:14
0
Utile
De rien

Deux remarques cependant :
1 / Utilise Select Case au lieu de ton double test, ou bien ElseIf (à voir).
2 / Now est obsolète, à remplacer par DateTime.Now

Et bonne prog.
Commenter la réponse de Utilisateur anonyme
0
Utile
Ok, je vais modifier ça.
Mais pourquoi ne peut-on pas utiliser now tout simplement?
Commenter la réponse de edwinzap
Utilisateur anonyme - 24 janv. 2013 à 17:40
0
Utile
Now fait partie de l'espace de noms Microsoft.VisualBasic qui est importé automatiquement et par défaut dans les projets. Ceci pour assurer une compatibilité avec les programmes convertis depuis vb6.

Pour avoir un code en pur .NET, retire cet import dans les références de ton projet.

Bien entendu, tu n'es pas obligé de le faire mais disons que c'est pour prendre de bonnes habitudes.
Commenter la réponse de Utilisateur anonyme
0
Utile
Et si j'utilise timeofday, est-ce que c'est mieux?
Commenter la réponse de edwinzap
Utilisateur anonyme - 24 janv. 2013 à 17:50
0
Utile
System.DateTime.Now fait très bien l'affaire, je ne vois pas ce qui te dérange ?
Commenter la réponse de Utilisateur anonyme
0
Utile
Dans le même ordre d'idée, est-il possible de connaitre le temps d'inactivité de l'ordinateur, voulant dire par-là lorsque l'utilisateur ne bouge pas la souris. Un peu le même système qu'utilisé dans messenger, skype,... permettant de mettre l'utilisateur comme absent après un certain temps.
Merci
Commenter la réponse de edwinzap
Utilisateur anonyme - 27 janv. 2013 à 18:05
0
Utile
Oui tu peux par exemple en plaçant un timer sur ton formulaire. Analyser la position du curseur en récupérant les coordonnées x et y de cette façon :
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     Debug.Print(String.Format("x={0}  y={1}", Cursor.Position.X, Cursor.Position.Y))
End Sub

Si ces valeurs ne changent pas pendant un certain temps, tu pourras en déduire que l'utilisateur fais la sieste. Il faudra également surveiller le clavier parce qu'il y a des personnes (comme moi) qui n'utilisent quasiment pas la souris.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 27 janv. 2013 à 18:18
0
Utile
Non ucfoutu, Cursor.Position remplace avantageusement cet API.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 27 janv. 2013 à 18:19
0
Utile
J'ai encore lu en diagonale, tu as raison et merci de me pardonner
Et bonne soirée.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 27 janv. 2013 à 18:33
0
Utile
Le problème ici, c'est qu'on ne peut pas supprimer voire éditer ses propres messages.
Donc merci de ne pas tenir compte de mes 3 derniers messages, de tester la solution de ucfoutu et de me f..... la p...
Et bonne soirée
Commenter la réponse de Utilisateur anonyme
0
Utile
Bonjour, bonsoir et merci pour vos réponses.
Je vais tester ça ucfoutu. Je vous tiendrez au courant.
Commenter la réponse de edwinzap

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.

Capter la mise en veille de l'ordinateur - page 2