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

Visual C++ Discussion :

[Win32] Pb avec "GetMessage"


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut [Win32] Pb avec "GetMessage"
    Bonjour à tous ,

    Voici mon problème je n'arrive pas à receptionner avec mon "GetMessage" dans mon .exe un message WM_QUITenvoyé par une DLL, je farme donc jamais mon .exe.
    J'ai essaillé d'envoyer ce même message à "windows média player" et la pas de problème sa provoque bien l'arret du programme.

    voici une partie du code contenu dans mon .exe :

    ...
    HWND CourantHandle = FindWindow("ConsoleWindowClass","C:\\ProjetsMG\\toto\\Debug\\toto.exe");
    HWND hMediaplayer = FindWindow("WMPlayerApp",NULL);

    systemState = InitialisationPhase(CourantHandle); // Phase d'init de ma DLL + choix du handel cible.
    ...

    voici une partie du code contenu dans ma .dll:

    void Init(HWND hDest) // _export est spécifique à BCB
    {...
    PostMessage(hDest, WM_QUIT, 0, 0);
    ...
    }
    Si quelqu'un peu m'aider

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Bonjour

    Je pense que ton couranthandle n'est pas bon.
    essaye plutot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HWND CourantHandle = FindWindow(NULL,"ConsoleWindowClass");
    cordialement

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut
    Merci pour t'as réponse.

    Mais je pense que ma version est bonne puisque j'ai bien une valeur positive renvoyé dans les 2 cas par la fonction "FindWindow".*

    HWND CourantHandle = FindWindow("ConsoleWindowClass","C:\\ProjetsMG\\toto\\Debug\\toto.exe");
    HWND hMediaplayer = FindWindow("WMPlayerApp",NULL);
    CourantHandle > 0 et hMediaplayer >0

    par contre avec sa :

    HWND CourantHandle = FindWindow(NULL,"ConsoleWindowClass");
    CourantHandle == 0.

    Mais merci quand meme pour la piste

  4. #4
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par ricky78 Voir le message
    Bonjour

    Je pense que ton couranthandle n'est pas bon.
    essaye plutot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HWND CourantHandle = FindWindow(NULL,"ConsoleWindowClass");
    cordialement
    Plutot faire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HWND CourantHandle = FindWindow(NULL,"titre de ta fenêtre");

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut
    Citation Envoyé par homeostasie Voir le message
    Plutot faire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HWND CourantHandle = FindWindow(NULL,"titre de ta fenêtre");
    Merci pour t'as réponse,

    Pour plus de précision mon projet est un projet console :

    Le nom de ma fenêtre est bien "C:\\ProjetsMG\\toto\\Debug\\toto.exe" donc aucune différence visiblement entre :
    HWND CourantHandle = FindWindow("ConsoleWindowClass","C:\\ProjetsMG\\toto\\Debug\\toto.exe");
    HWND CourantHandle = FindWindow(NULL,"C:\\ProjetsMG\\toto\\Debug\\toto.exe");
    Dans les deux cas :

    - CourantHandle > 0.
    - WM_QUIT n'est pas reçu par GetMessage

  6. #6
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Alors essaye plutot le message WM_CLOSE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ::PostMessage(hConsole, WM_CLOSE, 0, 0);

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Par défaut
    Citation Envoyé par homeostasie Voir le message
    Alors essaye plutot le message WM_CLOSE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ::PostMessage(hConsole, WM_CLOSE, 0, 0);
    Super , un grand merci "homeostasie".
    T'as piste était la bonne (j'ai un peu honte d'avoir si mal cherché )
    J'avais essailler WM_DESTROY mais sa ne fonctionnait pas.

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Et pourquoi ne pas utiliser la fonction: PostQuitMessage() ?

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    PostQuitMessage() ne sert pas à fermer la fenêtre, mais à terminer abruptement la boucle de messages.
    On le fait généralement quand la dernière fenêtre du thread (ou la fenêtre principale, si toutes les autres sont modales) est fermée.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

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