Streams

Résolu
M5i9k Messages postés 49 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 10 novembre 2007 - 21 mai 2006 à 16:03
M5i9k Messages postés 49 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 10 novembre 2007 - 22 mai 2006 à 15:07
Salut tout le monde, je ne savais pas ou poster cette question :

J'ai une application console, à partir de cette application je lance une autre console grâce à Process, je voudrais rediriger les flux de cette console vers mon application telle que :
-L'entrée de ma console soit redirigée vers celle de l'autre console
-La sortie de l'autre console soit redirigée vers ma console

Est-ce que vous pourriez m'aider? Merci d'avance.

6 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 mai 2006 à 00:18
Peut être cette fonction, je l'avais déja testée mais je me souviens plus de ce que ça donne :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/attachconsole.asp
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 mai 2006 à 17:35
Salut, tu as une partie de la solution dans ce snippet :

http://www.codyx.org/snippet_recuperer-text-programme-console_72.aspx
0
M5i9k Messages postés 49 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 10 novembre 2007
21 mai 2006 à 20:04
Ok, c'est une solution possible, mais je souhaiterais savoir si il est possible de rediriger le flux plûtot que de le lire et de renvoyer le résultat sur ma console, pour pouvoir communiquer directement avec le processus externe en lui envoyant des commandes et en recevant ses résultats sur ma console??
0
M5i9k Messages postés 49 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 10 novembre 2007
21 mai 2006 à 21:17
De plus la methode ReadToEnd() est bloquante et mon programme reste bloqué jusqu'à ce que le flux de l'autre console soit plein, en gros, je voulais savoir si il existe un moyen de lire le flux de l'autre console jusqu'à ce qu'il n'y à plus rienà lire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
M5i9k Messages postés 49 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 10 novembre 2007
22 mai 2006 à 02:19
Wouah bien vu ^^
Cependant pour que cette fonction marche, j'ai du faire appel à FreeConsole(), mais malgré la réussite, il n'y a pas de difference :s
voici mon code :

class Class1
    {   
        [DllImport("kernel32.dll", EntryPoint="AttachConsole")]
            private static extern bool AttachConsole(int pId);
        [DllImport("kernel32.dll", EntryPoint="FreeConsole")]
            private static extern bool FreeConsole();

        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {   
            Process p = new Process();
            p.StartInfo.FileName = "AppliTest.exe";
            //p.StartInfo.UseShellExecute = false;
            //p.StartInfo.RedirectStandardInput = true;
            //p.StartInfo.RedirectStandardOutput = true;
            p.Start();
            FreeConsole();
            if(AttachConsole(p.Id))
                Console.WriteLine("Attachement réussi!");
            else
                Console.WriteLine("Echec attachement");
           
            string mes ="";
            while(mes!="exit")
            {
                mes=Console.ReadLine();
                Console.WriteLine(mes);
            }
            p.Close();
        }
    }

Lorsque je tappe un mot, il s'écrit bien dans ma console, cependant j'attendais de voir le résultat de la sortie de l'autre console...
Je vais faire d'autre testes, merci pour cette api je n'y avais pas pensé .
0
M5i9k Messages postés 49 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 10 novembre 2007
22 mai 2006 à 15:07
C'est bon j'ai réussi!!!
J'ai redirigé l'entrée de ma console vers la console externe mais ne pas rediriger la sortie et sa fonctionne!!
Voici le code final pour d'autres qui chercheraient la solution :
class EmulateurTerminal
    {   
        [DllImport("kernel32.dll", EntryPoint="AttachConsole")]
            private static extern bool AttachConsole(int pId);
        [DllImport("kernel32.dll", EntryPoint="FreeConsole")]
            private static extern bool FreeConsole();

        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {   
            Process p = new Process();
            p.StartInfo.FileName = "AppliTest.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;       // On redirige l'entrée de la console externe
            //p.StartInfo.RedirectStandardOutput = true;  // On ne redirige pas la sortie (automatique)
            p.Start();
            FreeConsole();                                                 // On libère cette console
            if(AttachConsole(p.Id))                                     // On s'attache à la console externe
                Console.WriteLine("Attachement réussi!");
            else
                Console.WriteLine("Echec attachement");

           
            string mes ="";
            while(!p.HasExited)
            {
                mes=Console.ReadLine();
                p.StandardInput.WriteLine(mes);   // On écrit sur l'entrée de la console externe et recoit le résultat
            }
            p.Close();
        }

Merci Lutinore
0
Rejoignez-nous