2010-11-27 26 views
7

Quiero copiar toda la salida de una aplicación de consola mediante programación en el portapapeles (para que el usuario pueda obtener esto automáticamente sin modificar la ventana de cmd).C#. Cómo seleccionar programáticamente y copiar texto desde la aplicación de la consola?

Sé cómo acceder al portapapeles. No sé cómo obtener un texto de ventana de consola desde C#.

C# 3,5/4

+0

¿Cómo se inicia la aplicación de la consola? Es decir, manualmente por el usuario? Por tu programa? – Oded

+0

manualmente. nada especial. –

+1

¿Cómo identifica la ventana de la consola en su programa? – Oded

Respuesta

5

Una solución básica de abajo (justo redirigiendo la salida estándar a una instancia StringBuilder). Probablemente necesite agregar la referencia al System.Windows.Forms usted mismo en una aplicación de consola.

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

¿Pero esto no conservará los colores de primer plano y de fondo, o estos están de alguna manera codificados como símbolos Unicode? –

2

Esto dará la salida estándar en el portapapeles.

dir | clip 

Donde dir es sólo mi comando de prueba ...

Cuestiones relacionadas