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étecter la mise en veille


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Par défaut Détecter la mise en veille
    Bonjour,

    Je cherche à détecter le passage à la mise en veille (sleep ou hibernate) dans mon application.

    Après quelques recherches, j'ai vu que l'on pouvait passer par la classe WMI Win32_PowerManagementEvent

    Si la requête renvoie EventType == 4, il s'agit d'un évènement de type "Entering Suspend", ce qui signifie que l'on est en train de passer en veille.

    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
     
    int eventType = 0;
     
    //init
    if(!initializeCOMSecurityAndConnectWMI())
        return eventType; 
     
    //re-init pEnumerator
    m_pEnumerator = NULL;
     
    //Type of change in the system power state.
    //http://msdn.microsoft.com/en-us/library/aa394362%28VS.85%29.aspx
    if (FAILED(m_pSvc->ExecNotificationQuery (
            BSTR(L"WQL"),
            BSTR(L"SELECT * FROM Win32_PowerManagementEvent WITHIN 1"),
            WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
            NULL,
            &m_pEnumerator)))
    {
        return eventType;
    }
    else
    {
        IWbemClassObject *pclsObj;
        ULONG uReturn = 0;
     
        while (m_pEnumerator)
        {
            m_pEnumerator->Next(WBEM_NO_WAIT, 1,&pclsObj, &uReturn);
     
            //le problème est ici car uReturn == 0
            if(0 == uReturn)break;
     
            VARIANT vtProp;
     
            pclsObj->Get(L"EventType", 0, &vtProp, 0, 0);
            eventType = vtProp.uintVal;
     
            VariantClear(&vtProp);
            pclsObj->Release();
        }
        m_pEnumerator->Release();
    }
     
    m_pSvc->Release();
     
    CoUninitialize();
    Le problème, c'est que uReturn == 0 et donc je quitte la boucle directement et je n'arrive pas à récupérer l'EventType.

    J'ai également essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
    mais l'exécution s'arrête indéfiniment sur la ligne.

    Merci d'avance pour toute idée
    Salutations

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 6
    Par défaut
    Salut,

    regarde ici :
    http://www.codeproject.com/KB/system/OSEvents.aspx

    ça ne corrige pas ton code mais ça semble faire ce que tu veux...
    ça a l'air plus simple que ton code sur le principe...

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/09/2012, 17h53
  2. Comment détecter et empêcher la mise en veille ?
    Par Lung dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 12/05/2011, 08h04
  3. Détecter la mise en veille d'un PDA
    Par noutazia20 dans le forum Windows Mobile
    Réponses: 4
    Dernier message: 07/09/2010, 00h36
  4. Détecter la mise en veille sous Vista
    Par sinfoni dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 23/04/2008, 08h32
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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