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 : 33
    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.

  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 : 33
    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_ ?

  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 : 33
    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 ?

  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 : 33
    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 ?

  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 : 33
    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)

  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 : 33
    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.

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