IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Détection mise en veille de Windows par un service


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 285
    Points : 91
    Points
    91
    Par défaut Détection mise en veille de Windows par un service
    Bonjour,

    Voila je souhaite détecter le moment ou se met en veille mon pc.
    J'utilise pour cela ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     OnStart(){
     
    SystemEvents.PowerModeChanged += OnPowerChange ;
    }
     private  void OnPowerChange(Object sender, PowerModeChangedEventArgs e) {
    eventLog1.WriteEntry("Resume ");
      switch ( e.Mode ) {
        case PowerModes.Resume:
              eventLog1.WriteEntry("Resume"); IdleWacth_init();
          break;
        case PowerModes.Suspend:
          SystemEvents_PowerModeChanged();break;
        default: eventLog1.WriteEntry("oter"); IdleWacth_init(); break;
     
     
      }
    }
    Mon problème est que je n'attend pas l'évènement PowerModeChangedEven donc ce la ne fonctionne. Je voudrais savoir comment attendre que l'évènement ait lieu.
    J'ai pensé utliser SystemEvents.InvokeOnEventsThread mais je ne vois pas comment. Si quelqu'un peut m'aider, Merci

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 285
    Points : 91
    Points
    91
    Par défaut
    Après plusieurs recherches j'ai pu découvrir que PowerModeChangeEventHandler n'est pas envoyé au service. J'ai donc essayer quelque chose de nouveau qui ne fonctionne pas voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    using System;
    using System.Windows.Forms;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    using Gma.UserActivityMonitor;
    using Microsoft.Win32;
    using System.Management;
     
    namespace WindowsService1
    {
        public partial class Service1 : ServiceBase
        {
            private InputInfos.ClsAfIdleInfos IdleWatch = null;
            private EventArgs e = null;
            private long j = 0L;
            private GlobalEventProvider mouseMove;
            private ManagementEventWatcher ManagementEventWatcher=null;
          //  public class WqlEventQuery : EventQuery { };
     
            public Service1()
            {
                InitializeComponent();     
                eventLog1.Source = "Service2";        
            }
     
      protected override void OnStart(string[] args)
            {
                eventLog1.WriteEntry("my service started"); 
                IdleWacth_init();
     
            }
     
         private void IdleWacth_init()
            {
                eventLog1.WriteEntry("initb");
                WqlEventQuery query = new System.Management.WqlEventQuery("Win32_PowerManagementEvent");
                 ManagementEventWatcher  = new ManagementEventWatcher(query);
                    ManagementEventWatcher.EventArrived += new EventArrivedEventHandler(OnPowerChange);
     
                 ManagementEventWatcher.Start();
     
                eventLog1.WriteEntry("expi = 4");
            }
    private  void OnPowerChange(Object sender, EventArrivedEventArgs e)
          {               
              eventLog1.WriteEntry("Resume ");
                       int eventType = Convert.ToInt32(e.NewEvent.Properties["EventType"].Value);
                       switch (eventType)
              {
                        case 7:
                              eventLog1.WriteEntry("Resume"); IdleWacth_init();
                          break;
                        case 4:
                          SystemEvents_PowerModeChanged();break;
                        default: eventLog1.WriteEntry("oter"); IdleWacth_init(); break;
     
             }
    }
      private void SystemEvents_PowerModeChanged()
            {
                eventLog1.WriteEntry("Activité détectée");
                     Process[] myProcesses;
     
                   // Returns array containing all instances of Solitaire
                    myProcesses = Process.GetProcessesByName("calc");
     
                     if(myProcesses.Length >0)
                    {
     
                        foreach (Process myProcess in myProcesses)
                        {
     
                            myProcess.Kill();
     
                        }
                        RestartService(this.ServiceName, 5000);
                     }
     
          }
    Le problème est que je rentre dans la fonction OnPowerChange(...). est que cela vient du fait que MannagementWatcher n'attends pas le changement état??

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 285
    Points : 91
    Points
    91
    Par défaut
    Alors j'ai trouvé mon souci il y avait un conflit de nom, j'ai changer OnPowerChange en OnPowerChanged et maintenant ça marche.
    Mais cela ne marche que lorsque je met en veille manuellement et non quand le pc se met en veille seul.

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 285
    Points : 91
    Points
    91
    Par défaut
    Merci pour votre, tout fonctionne très bien, c'était juste un problème de configuration de mise en veille de mon pc.
    [RESOLU]

  5. #5
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 126
    Points : 2 237
    Points
    2 237
    Par défaut
    Bonjour,

    D'après la réponse, je devine en partie le sens de la question.

    Mais je crois bien que c'est ce que je cherchais.

Discussions similaires

  1. AWT détection mise en veille
    Par aharel dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 11/10/2020, 15h34
  2. Détection mise en veille
    Par ElfeNoir dans le forum Android
    Réponses: 11
    Dernier message: 24/02/2012, 14h36
  3. Réponses: 2
    Dernier message: 21/11/2011, 16h17
  4. Réponses: 1
    Dernier message: 06/02/2008, 14h37
  5. Réponses: 15
    Dernier message: 22/04/2006, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo