2010-08-23 51 views
309

¿Cómo puedo copiar una cadena (por ejemplo, "hola") al Portapapeles del sistema en C#, así que la próxima vez que presione CTRL + V ¿Me saldrá "Hola"?Cómo copiar datos al portapapeles en C#

+4

posible duplicado de [Cómo copiar el contenido de una cadena en el portapapeles en C#?] (http://stackoverflow.com/questions/899350/how-to-copy-the-contents-of-a-string-to-the-clipboard-in-c) –

Respuesta

602

Usted necesitará una declaración de espacio:

using System.Windows.Forms; 

O para WPF:

using System.Windows; 

para copiar una cadena exacta (literal en este caso):

Clipboard.SetText("Hello, clipboard"); 

Para copiar el contenido de un cuadro de texto:

Clipboard.SetText(txtClipboard.Text); 

See here for an example. O ... Official MSDN documentation o Here for WPF.

+11

me gano! +1 La clase Clipboard está en 'System.Windows.Forms' –

+0

Agregué el espacio de nombres, pero aún no veo la clase Clipboard. tal vez es porque estoy utilizando la aplicación de la consola? – aharon

+0

sí lo es! tanques! – aharon

39
Clipboard.SetText("hello"); 

Usted tendrá que utilizar los System.Windows.Forms o System.Windows espacios de nombres para eso.

+0

La misma respuesta como http://stackoverflow.com/a/3546026/206730 - Quizás sea mejor eliminarla, en mi humilde opinión ser novato con SO – Kiquenet

24

Mi experiencia con este problema usando WPF C# para hacer frente al portapapeles y System.Threading.ThreadStateException, Mi código que funcionó correctamente con todos los navegadores

Thread thread = new Thread(() => Clipboard.SetText("String to be copied to clipboard")); 
thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA 
thread.Start(); 
thread.Join(); 

créditos a este post here

pero esto funciona SOLAMENTE EN LOCALHOST, NO INTENTE ESTO AL SERVIDOR, PORQUE NO VA A TRABAJAR. en el servidor lo hice usando zeroclipboard. la única forma, después de mucha investigación.

+0

Lo usé en la prueba automatizada de Selenium (webdriver) y funciona muy bien! –

+0

@ andrew.fox lo probaste en tu servidor - modelo de cliente? porque si se trata de 2 máquinas separadas, supongo que no debería funcionar. – BMaximus

+0

Lol no, Selenium abre la ventana del navegador en la máquina del agente. –

20

Para consola proyecta paso a paso, primero tendrá que agregar la referencia System.Windows.Forms. Los siguientes pasos funcionan en Visual Studio 2013 Comunidad con .NET 4.5:

  1. En el Explorador de soluciones , ampliar su proyecto de consola.
  2. Haga clic Referencias, a continuación, haga clic en Agregar referencia ...
  3. En las Asambleas grupo, bajo Marco, seleccione System.Windows.Forms.
  4. Haga clic en Aceptar.

A continuación, agregue la declaración siguiente en using con los demás en la parte superior de su código:

using System.Windows.Forms; 

A continuación, agregue uno de los siguientes Clipboard.SetText declaraciones a su código:

Clipboard.SetText("hello"); 
// OR 
Clipboard.SetText(helloString); 

Y, por último, añadir STAThreadAttribute a su método de Main de la siguiente manera, para evitar una System.Threading.ThreadStateException:

[STAThreadAttribute] 
static void Main(string[] args) 
{ 
    // ... 
} 
+1

La clase 'StackOverflowException' precede inmediatamente a 'STAThreadAttribute' en el .NET Framework System Class Library =) –

+1

¡Mi héroe, gracias por la adición del atributo! Me ahorró un montón de tiempo. – Rinktacular

+0

@Rinktacular Eres muy bienvenido =) ¡Gracias por los comentarios! –

Cuestiones relacionadas