2010-08-23 18 views
309

Come posso copiare una stringa (ad esempio "ciao") negli Appunti di sistema in C#, quindi la prossima volta che premo CTRL + V riceverò "buongiorno"?Come copiare i dati negli Appunti in C#

+4

possibile duplicato di [Come copiare il contenuto di una stringa al appunti in C#?] (http://stackoverflow.com/questions/899350/how-to-copy-the-contents-of-a-string-to-the-clipboard-in-c) –

risposta

602

Avrete bisogno di una dichiarazione dello spazio dei nomi:

using System.Windows.Forms; 

OR per WPF:

using System.Windows; 

Per copiare una stringa esatta (letterale in questo caso):

Clipboard.SetText("Hello, clipboard"); 

Per copia il contenuto di una casella di testo:

Clipboard.SetText(txtClipboard.Text); 

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

+11

mi ha battuto! +1 La classe Clipboard si trova in 'System.Windows.Forms' –

+0

ho aggiunto lo spazio dei nomi, ma continuo a non vedere la classe Clipboard. forse è perché sono un'applicazione console usintg? – aharon

+0

sì, è! carri armati! – aharon

39
Clipboard.SetText("hello"); 

Avrete bisogno di utilizzare i System.Windows.Forms o System.Windows spazi dei nomi per questo.

+0

La stessa risposta come http://stackoverflow.com/a/3546026/206730 - Forse meglio eliminarlo, IMHO è novizio con SO – Kiquenet

24

La mia esperienza con questo problema utilizzando WPF C# affrontare negli appunti e System.Threading.ThreadStateException, Il mio codice che ha funzionato correttamente con tutti i browser

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(); 

crediti a questo post here

MA questo funziona SOLO SU LOCALHOST, NON PROVARE QUESTO AL SERVER, CAUSA CHE NON FUNZIONERÀ. sul server l'ho fatto usando la zeroclipboard. l'unico modo, dopo un sacco di ricerca.

+0

L'ho usato nel test Selenium automatizzato (webdriver) e funziona benissimo! –

+0

@ andrew.fox l'hai provato sul tuo server - modello client? perché se si tratta di 2 macchine separate credo che non dovrebbe funzionare. – BMaximus

+0

No Lol, Selenium apre la finestra del browser sul computer dell'agente. –

20

Per i progetti della console in modalità passo passo, è necessario prima aggiungere il riferimento System.Windows.Forms. Le seguenti operazioni funzionano in Visual Studio .NET 2013, con Community 4.5:

  1. In Esplora soluzioni, espandere il progetto di console.
  2. destro del mouse Riferimenti, quindi fare clic su Aggiungi riferimento ...
  3. Negli Assemblee gruppo, sotto Framework, selezionare System.Windows.Forms.
  4. Fare clic su OK.

Quindi, aggiungere il using istruzione che segue con gli altri nella parte superiore del vostro codice:

using System.Windows.Forms; 

Quindi, aggiungere uno dei seguenti Clipboard.SetText dichiarazioni al codice:

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

E, infine, aggiungere STAThreadAttribute al metodo Main come segue, al fine di evitare un System.Threading.ThreadStateException:

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

La classe 'StackOverflowException' precede immediatamente' STAThreadAttribute' nella libreria di classi del sistema .NET Framework =) –

+1

My Hero, grazie per l'aggiunta dell'attributo! Mi ha salvato un sacco di tempo. – Rinktacular

+0

@Rinktacular Sei molto benvenuto =) Grazie per il feedback! –

Problemi correlati