2010-11-27 3 views
7

Je veux copier toute la sortie d'une application de console par programmation dans le presse-papiers (afin que l'utilisateur puisse l'obtenir automatiquement sans bricoler avec la fenêtre cmd).C#. Comment sélectionner et copier par programme le texte de l'application de console?

Je sais comment accéder au presse-papier. Je ne sais pas comment obtenir un texte de fenêtre de console de C#.

C# 3,5/4

+0

Comment l'application de console est-elle démarrée? C'est, manuellement par l'utilisateur? Par votre programme? – Oded

+0

manuellement. rien de spécial. –

+1

Comment identifiez-vous la fenêtre de la console dans votre programme? – Oded

Répondre

5

Une solution de base ci-dessous (juste rediriger la sortie standard à une instance StringBuilder). Vous devez probablement ajouter vous-même la référence à System.Windows.Forms dans une application console.

using System; 
using System.IO; 
using System.Text; 
using System.Windows.Forms; 

public class Redirect 
{ 
    [STAThread()] 
    public static void Main() 
    { 
     StringBuilder sb = new StringBuilder(); 
     StringWriter sw = new StringWriter(sb); 

     Console.SetOut(sw); // redirect 

     Console.WriteLine("We are redirecting standard output now..."); 

     for (int i = 0; i < 10; i++) { Console.WriteLine(i); } 

     sw.Close(); 
     StringReader sr = new StringReader(sb.ToString()); 
     string completeString = sr.ReadToEnd(); 
     sr.Close(); 

     Clipboard.SetText(sb.ToString()); 
     Console.ReadKey(); // just wait... (press ctrl+v afterwards) 
    } 
} 
+0

Mais cela ne conservera pas les couleurs de premier plan et d'arrière-plan, ou sont-elles codées en quelque sorte comme des symboles Unicode? –

2

Cela donnera stdout au presse-papiers.

dir | clip 

Où dir est juste ma commande de test ...

Questions connexes