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 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 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 actif Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Points : 247
    Points
    247
    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
    La connaissance n'est rien si elle n'est pas partagé

    Citation de Confucius :
    Ceux dont la connaissance est innée sont des hommes tout à fait supérieurs. Puis viennent ceux qui acquièrent cette connaissance par l'étude. Enfin, ceux qui, même dans la détresse, n'étudient pas : c'est le peuple.

  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
    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
    Points : 5 195
    Points
    5 195
    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
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  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
    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
    Points : 5 195
    Points
    5 195
    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
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  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
    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
    Points : 5 195
    Points
    5 195
    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
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  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
    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