M5i9k
Messages postés49Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention10 novembre 2007
-
21 mai 2006 à 16:03
M5i9k
Messages postés49Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention10 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
M5i9k
Messages postés49Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention10 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??
M5i9k
Messages postés49Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention10 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
M5i9k
Messages postés49Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention10 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 :
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é .
M5i9k
Messages postés49Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention10 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();
}