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 :

Interaction Winform C# et Application console C++


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut Interaction Winform C# et Application console C++
    Bonjour,

    J'ai créé une application winform C# contenant différents boutons.

    J'ai créé de même une application console en C++.

    Dans le Main de ma console C++ j'effectue différentes actions au travers d'un .

    Je souhaiterai envoyer un raccourci par exemple depuis le clic de mon button C# vers mon application console C++.

    Comment faire ?

    Je pensais utiliser les Process avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myProcess.StartInfo.Arguments
    mais le problème c'est que mon application console va être lancée Xfois.

    Merci d'avance pour vos réponse.

    Cordialement,


  2. #2
    Membre éclairé Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Par défaut
    C'est peut être pas la meilleur solution mais tu mais une public static variable verif qui passe a 1 quand tu lance ta fenêtre et après tu vérifie si elle est a 1 tu lance pas l'appli c++ si elle est a 0 tu la lance

  3. #3
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut
    oui j'y avais pensé, mais c'est pas propre du tout.

    En fait, suite au clic d'un bouton dans l'application C#, il faudrait pouvoir envoyer à l'application C++ console, un raccourci clavier en arguments afin d'effectuer le traitement adéquat.


  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Salut

    une solution serait de faire :

    FindWindow (regarde dans www.pinvoke.net pour DllImport) pour recuperer
    le handle de ta fenetre Dos

    Et ensuite, tu peux faire des SendMessage de ton application C# vers ton
    application Dos

    Ca me parait une solution simple et rapide à mettre en oeuvre

    The Monz, Toulouse

  5. #5
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut
    ok, je vais plancher sur ça et je vous tiens au courant.

    Merci

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    beh, j'ai crée un exe CLRDosApplication qui j'appelle CLRConsole.exe

    Ensuite, dans mon C# winform, je fais cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
            public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
     
    Process MyDos;
                Process[] myDosApplication = Process.GetProcessesByName("CLRConsole");
                if (myDosApplication.Length > 0)
                {
                    MyDos = myDosApplication[0];
    // 0x0100 correspond au message windows WM_KEYDOWN
    // pour les arguments, faut peut-etre creuser un peu :)
                    SendMessage(MyDos.MainWindowHandle, 0x0100, (IntPtr)0x40, IntPtr.Zero);
                }
    et dans le code de mon application dos, je fais un getch() pour voir quand
    l'utilisateur appuie sur une touche.. Et ca fonctionne

    The Monz, Toulouse

  7. #7
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut
    Oui ça marche merci

    Par contre au lieu d'avoir une application console C++ maintenant j'ai une application Win32 Project C++.

    Par défaut le Wizard créé un menu.
    Dans ce menu j'ai créé des sous menu M1, M2, M3 et M4 ainsi que des raccourcis clavier rattachés à ces sous menus.

    A chaque clic d'un menu je fais un traitement.

    Maintenant je souhaiterai, depuis mon application winform C#, faire SendMessage des raccourcis clavier de ces menus.

    Pour l'instant je n'arrive pas à faire fonctionner SendMessage() !!!

    Une Idée ??

    Merci

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    pour que SendMessage puisse "atteindre" ton application il faut essentiellement que tu arrives à récuperer le "bon" handle de ton application...

    Supposons que tu as créer l'accelerator

    Toto qui aurait pour idée : 32772 (pourquoi pas)

    dans ton applic C++, tu as quelque part dans le WndProc, un truc du genre :

    case WM_COMMAND:
    switch(LOWORD(wparam))
    case :
    32772 -> executer mon raccourci clavier

    Alors , le code du sendmessage devient alors :

    // le 0x111 = WM_COMMAND
    SendMessage(MyAppliC++.MainWindowHandle, 0x0111, (IntPtr)32772, IntPtr.Zero);

    Et automatiquement, dans l'appli C++ , j'ai l'action associé à mon menu (enfin,
    l'action associée à l'accelerator)

    Pour trouver les ID (genre 0x111) des messages, regarde dans :

    Winuser.h (c'est la que sont définis les valeurs de TOUS les messages windows pour les interfaces utilisateurs

    The Monz, Toulouse

  9. #9
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut
    Oui c'est bon ça fonctionne.

    En fait je me suis entété à vouloir attraper la commande WM_KEYDOWN, mais en fait, les accelerators sont accessibles depuis WM_COMMAND autant pour moi.

    ça fonctionne très bien.

    Merci à tous pour votre aide.
    Bonne journée.

    Cordialement,


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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/05/2004, 15h37
  2. [Kylix] une application console
    Par naili dans le forum EDI
    Réponses: 3
    Dernier message: 19/04/2004, 14h27
  3. [Delphi] Application "console" et caractères ASCII
    Par Yorys dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 31/07/2003, 09h50
  4. [Kylix] Kylix 3 et Applications console
    Par deniscm dans le forum EDI
    Réponses: 2
    Dernier message: 14/01/2003, 13h37
  5. [Kylix] application console avec kylix 3 ?
    Par Hakim dans le forum EDI
    Réponses: 4
    Dernier message: 15/11/2002, 22h45

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