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

Windows Discussion :

SendMessage Utilisation !


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Points : 45
    Points
    45
    Par défaut SendMessage Utilisation !
    Bonjour,

    Peut on faire un depuis une application C# par exemple sur une fenetre d'un projet C++ Win32 Invisible ?

    Merci de vos réponses.


  2. #2
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    On peut envoyer des messages même à une fenêtre invisible.
    Enfin, a condition d'avoir son handle, bien sûr.
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  3. #3
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Points : 45
    Points
    45
    Par défaut
    J'ai essayé de faire la chose suivante depuis mon appli C#

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(p[0].MainWindowHandle, 0x0111, 49, 0);
    Ceci fonctionne quand la fenetre du projet C++ est visible.

    Ici j'utilise donc ça marche.

    Si je rend invisilble la fenetre ça ne fonctionne plus.

    Alors j'ai essayé d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(p[0].Handle, 0x0111, 49, 0);
    mais ça ne fonctionne pas.

    Une idée ?


  4. #4
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Comment la fenêtre a-telle été rendue invisible ?
    ShowWindow(hwnd,SW_HIDE) ?

    Je ne programme qu'en C+ avec l'API Win32, que represente p[0] ?
    La valeur 0x11111 est-elle la valeur du message ? Pourquoi ne pas utiliser les constantes WM_ ?
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  5. #5
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Points : 45
    Points
    45
    Par défaut
    J'ai modifié dans le code généré par VS la ligne suivante
    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
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
    
       hInst = hInstance; // Store instance handle in our global variable
    
       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowWindow(hWnd, SW_HIDE);

  6. #6
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Pas de boucle genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while(GetMessage(...))
    {
    TranslateMessage(...);
    DispatchMessage(...):
    }
    Et quel est le message à envoyer ?
    De même, que represente la valeur 49 ?
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  7. #7
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Points : 45
    Points
    45
    Par défaut
    Si la boucle existe, j'ai juste modifié cette partie pour la rendre invisible.

    Quand la fenetre C++ est visible et que je lance la commande SendMessage depuis mon appli C# ça fonctionne.

    Par contre quand la fenetre C++ est SW_HIDE ça ne fonctionne pas.

    cela représente mon process (la fenetre C++) du point de vue C#.

  8. #8
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Est-il possible de réafficher la fenêtre C++ une fois qu'elle a été Cachée ?
    Je me répète, mais quel est le message correspondant à la valeur 0x0111 ?
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  9. #9
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Points : 45
    Points
    45
    Par défaut
    Pour infos :

    0x0111 représente le code hexé de WM_COMMAND mais depuis C# je ne peut qu'envoyer le code hexa.

    Et 49 représente la valeur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define ID_MA_VARIABLE 49
    du coté C++.

    ça me permet de faire la chose suivante dans mon code C++

    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
    switch (message)
    	{
    	case WM_COMMAND:
    		wmId    = LOWORD(wParam);
    		wmEvent = HIWORD(wParam);
    		// Parse the menu selections:
    		switch (wmId)
    		{
    			case  ID_MA_VARIABLE :
    				MaFunct () ;			
    				break ;
    
    ......
                    }
    
    ......
    }
    J'espère que c'est un peu plus clair

  10. #10
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Points : 45
    Points
    45
    Par défaut
    Est-il possible de réafficher la fenêtre C++ une fois qu'elle a été Cachée ?
    Non je ne peux pas la réafficher.

    L'application c++ se lance, elle n'est visible que dans la task manager et ça me convient tout à fait.

    Mon problème est le fait de ne pouvoir interargir avec elle juste parce qu'elle est invisible.

  11. #11
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Non mais je disais ça pour faire un test : Une fois la fenêtre créee dans l'appli C++, on essaye de la réafficher à partir de l'appli C#. Comme ça, on sait si le problème vient du handle invalide, ou si il est impossible d'envoyer des messages à une fenêtre invisible (ce qui me parait étrange, puisque j'ai fait un compteur qui utilisait une fenêtre invisible, et qui l'affichait à l'expiration d'un timer)
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  12. #12
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Points : 45
    Points
    45
    Par défaut
    si tu as déjà réussi à le faire c'est qu'il doit y avoir un problème au niveau de l'utilisation de SendMessage() depuis C#...

  13. #13
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    p[0] cela représente mon process (la fenetre C++) du point de vue C#.
    Le problème peut venir de là. Essaye de déboguer ton prog pour voir le contenu des variables en temps réel.
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/11/2010, 20h48
  2. problème SendMessage en utilisant ON_MESSAGE
    Par mfcProgrammer dans le forum MFC
    Réponses: 6
    Dernier message: 25/03/2010, 11h42
  3. [Lazarus] Comment utiliser SendMessage ?
    Par endaco dans le forum Lazarus
    Réponses: 15
    Dernier message: 25/02/2010, 17h58
  4. [WD10] Utilisation de SendMessage problématique
    Par pedro_delavega dans le forum WinDev
    Réponses: 4
    Dernier message: 30/06/2009, 17h34
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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