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 :

[Process] Lancer programme externe dans form


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut [Process] Lancer programme externe dans form
    Bonjour à tous,

    J'essaie de lancer un programme externe à partir d'une winform.
    Pas de problème pour lancer, par exemple notepad++ :
    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
    20
     
    public void lauchNotePad()
            {
                try
                {
                    p = null;
                    string targetDir;
                    targetDir = string.Format(@"C:\Program Files\Notepad++");
                    p = new Process();
                    p.StartInfo.WorkingDirectory = targetDir;
                    p.StartInfo.FileName = "nppIExplorerShell.exe";
                    p.StartInfo.CreateNoWindow = true;
                    p.Start();
                    p.WaitForExit();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erreur : "+ex.ToString(), "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
    Ca marche nikel. Je souhaiterai maintenant avoir notepad++ qui tourne mais intégré dans ma form (dans un panel ou un autre container par exemple).
    Je ne sais pas si cela est possible...
    J'ai aperçu la fonction setParent ici mais
    je n'ai pas trop compris l'exemple. De plus je n'arrive pas à trouver la doc de setParent dans la doc msdn.
    Si quelqu'un un a lien sur la doc ou un bout de code bien commanté ce serait nikel!
    Merci d'avance.

  2. #2
    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

    l'idée est que tu recupères le Handle de la fenetre que tu viens de créer via le process.Start() et ensuite, tu peux utiliser setParent pour dire à la fenetre
    crée que son parent c'est le Handle fourni (genre le handle d'un panel)

    Normalement, ca devrait fonctionner

    The Monz, Toulouse

  3. #3
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    C'est si simple que cela !!! C'est cool ça, même si cela ne m'est d'aucune utilité je crois que je vais le mettre en pratique sur une de mes IHM

  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
    et oui ced600

    C'est aussi "simple" que cela

    Eventuellement, un petit appel à SetwindowPos (api Win32) pour "replacer"
    la fenetre comme il faut....

    Mais apres, tu peux faire un truc du genre (une fois le set parent fait)

    Control a = Control.FromChildHandle(tonHandle);

    Et ainsi, tu te retrouves avec un control qui correspond à ton "executable"

    Cela dit, attention à une chose : Quand tu cliques dans la partie de ton executable, la barre "bleue" de ta fenetre principale passe en mode "inactive"
    (comme quand tu bascules d'un programme à un autre

    Tu dois pouvoir "virer" ce comportement en jouant avec les WndProc,
    mais bon... j'ai pas investiguez plus que cela

    Cela dit, cette technique peut etre "interessante" dans le cadre suivant :

    J'ai un visuel 3D en XNA .. mais je ne sais pas "intégrer" XNA à mon application
    directement ... par contre, la com entre mon programme A et mon programme XNA est basé sur remoting, ou tcp, ou autre...

    Et beh, je peux "integrer" mon visuel dans mon application et donc, manipuler via une fenetre les deux applications

    (un peu la technique qu'on utilisait pour integrer du OpenPerformer Windows dans une fenetre MFC à l'époque (enfin, ya 5 ans ))

    The Monz, Toulouse

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    On pourrait intégrer à la fenêtre Windows de l'appli courante, une application qui fonctionne sur un poste distant ?

    Je vais faire une IHM pour piloter à distance une application (type service windows). Cette appli (une pondeuse d'appel SIP sur un réseau P2P) pilote deux logiciels (un noeud du réseau et SiPp qui me permet de généré les appels SIP). Je lance plusieurs instance de SiPp lorsque je fait des appels, et je me disais, que si le gars qui supervisera mon appli, se connecte via l'IHM à distance au moment ou je fait les appels, je pourrais intégrer alors les fenêtres de type console que m'ouvrent SiPp, pour lui permettre de voir ce qu'il se passe.

    (un peu la technique qu'on utilisait pour integrer du OpenPerformer Windows dans une fenetre MFC à l'époque (enfin, ya 5 ans ))
    Connais pas, j'ai commencé la pog il y a 2 ans et demi

    Avant je n'étais qu'un simple biologiste

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    Merci pour la réponse The Monz!
    Je n'ai pas encore pu tester l'exemple!
    En effet quand j'essaie d'appeler l'API user32 en ajoutant simplement une référence à la dll dans mon projet, visual studio plante!
    J'ai juste fait : Clique droit sur référence -> Ajouter une référence -> J'ai indiqué le chemin jusqu'à la dll user32 que j'ai copié dans un répertoire de mon projet!
    Et ensuite visual studio a planté!
    Sinon j'ai suivi l'exemple en ajoutant dans mon code :
    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
    20
     
    public class Win32
        {
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
        }
     
    //Et ensuite dans ma fonction 
                    Process p;
                    p = null;
                    string targetDir;
                    targetDir = string.Format(@"C:\Program Files\Notepad++");
                    p = new Process();
                    p.StartInfo.WorkingDirectory = targetDir;
                    p.StartInfo.FileName = "nppIExplorerShell.exe";
                    p.StartInfo.CreateNoWindow = true;
                    p.Start();
                    Win32.SetParent(p.MainWindowHandle, mainPanel.infopatient.Handle);
                    p.WaitForExit();
                }
    Et bien sur quand je veux compiler j'obtiens que la référence user32 est manquante!!!!

Discussions similaires

  1. lancer programme externe
    Par xavier-Pierre dans le forum Général Python
    Réponses: 2
    Dernier message: 03/11/2010, 09h39
  2. Inclure un programme externe dans une winform
    Par furtif1 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/05/2010, 23h17
  3. Intégrer un programme externe dans une application java
    Par NiKoMinus dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 30/11/2008, 19h29
  4. Réponses: 5
    Dernier message: 17/03/2008, 11h51
  5. Réponses: 8
    Dernier message: 06/03/2008, 12h52

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