locked
Détecter mise en Veille du pc en C++ indépendamment du framework .net RRS feed

  • Discussion générale

  • Bonjour tous le monde
    je compte sur votre aide!

    à l'aide de l'API win32  SystemEvents.PowerModeChanged  j'ai réussi à detecter la mise en veille du PC avec une application VC++ windows Forms mais je dois l'utiliser indépendamment du Framework .net avec du code natif C++

    on m'a conseiller de developper un application console mais j'arrive pas à le faire!

    est ce que je peux utiliser l'api win 32 sans .NET ?

    d'autre solution?

    mille merci
    jeudi 30 avril 2009 11:10

Toutes les réponses

  • SystemEvents.PowerModeChanged -> C'est du .NET pas du Win32.

    Le namespace Microsoft.Win32 n'est qu'un namespace .NET et n'a pas grand chose à voir avec l'API Win32 qui est une API C (pas C# :-)).
    Donc OUI, tu peux utiliser Win32 sans .NET, .NET utilise (et pour encore un bon moment) Win32 donc, techniquement, tu utilises Win32 si tu utilises .NET.

    M$ a mis dans ce namespace un ensemble de fonctionnalité qui sont couramment utilisées en Win32.

    La logique c'est que, si c'est un truc que vous avez l'habitude de faire en Win32, mais qui utilise des concepts difficilement compatibles avec le model objet de .NET, il doit y avoir un moyen plus ou moins élégant de faire la même chose avec le contenu de ce namespace Microsoft.Win32.

    Mis en application sur le problème de Rais.Touhami :
    - Détecter un changement de PowerMode en Win32 se fait par la récupération d'un message "WM_POWERBROADCAST = 0x218" envoyé à toutes les fenêtres.
    -> C'est pas super transposable en WinForm, n'est-ce pas.

    Règle générale : si c'est facile en .NET et qu'on veux le faire en Natif, on utilise Reflector( http://www.red-gate.com/products/reflector/) pour voir le code source du Framework, et ainsi savoir comment il fait. Avec ces informations, on pourra faire pareil que le Framework, mais en Natif ; car .NET utilise Win32 comme notre code Natif.

    En regardant le résultat de la décompilation avec Reflector, c'est bien en récupérant les message envoyés aux fenêtres de l'application que .NET implémente SystemEvents.PowerModeChanged .

    Il suffit donc d'intercepter les messages envoyés aux fenêtres de l'application. Cela est très simple dans une application Windows Native car elle s'articule autour de la pompe à message. Sur récupération d'un "WM_POWERBROADCAST", il faudra faire l'analyse du message et faire le traitement nécessaire.
    http://msdn.microsoft.com/en-us/library/aa373247(VS.85).aspx

    L'utilisation d'une application console risque de compliquer beaucoup plus les choses. Si c'est juste pour simplifier le problème, bin c'est complètement le contraire. Si c'est un pré-requis du projet, il faudra qu'on trouve une autre solution.


    Paul Bacelar, MVP VC++
    jeudi 30 avril 2009 17:29
  • merci j'apprécie vraiment ton aide!

    quel type d'application visual C++ dois-je utiliser et si c'est possible de m'envoyer un lien qui contien un exemple d'utilisation de "WM_POWERBROADCAST" car je débute en C++

    merci d'avance
    jeudi 30 avril 2009 19:51
  • Pas tester la démo suivante, mais cela semble être assez simple.
    http://www.codeproject.com/KB/vista/VGPowerMonitor.aspx


    Si pas de .NET, une application Windows simple (PAS une application console).
    Paul Bacelar, MVP VC++
    vendredi 1 mai 2009 14:52
  • merci mon ami je vai voir sa de suite!
    vendredi 1 mai 2009 18:04