Как скопировать данные в буфер обмена в С#

Как скопировать строку (например, "привет" ) в системный буфер обмена на С#, поэтому в следующий раз я нажимаю CTRL+V, я получу "привет"?

Ответ 1

Вам понадобится объявление пространства имен:

using System.Windows.Forms;

ИЛИ для WPF:

using System.Windows;

Чтобы скопировать точную строку (буквальный в этом случае):

Clipboard.SetText("Hello, clipboard");

Чтобы скопировать содержимое текстового поля:

Clipboard.SetText(txtClipboard.Text);

См. здесь пример. Или... Официальная документация MSDN или Здесь для WPF.

Ответ 2

Clipboard.SetText("hello");

Для этого вам нужно использовать пространства имен System.Windows.Forms или System.Windows.

Ответ 3

Мой опыт решения этой проблемы с использованием WPF С# для копирования в буфер обмена и System.Threading.ThreadStateException приведен здесь с моим кодом, который корректно работал во всех браузерах:

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

кредиты на этот пост здесь

Но это работает только на локальном хосте, поэтому не пытайтесь сделать это на сервере, так как он не будет работать.

На стороне сервера я сделал это с помощью zeroclipboard. Единственный способ, после долгих исследований.

Ответ 4

Для консольных проектов поэтапно вы должны сначала добавить ссылку System.Windows.Forms. Следующие шаги работают в Visual Studio Community 2013 с .NET 4.5:

  • В Обозреватель решений разверните консольный проект.
  • Щелкните правой кнопкой мыши Ссылки, затем нажмите Добавить ссылку...
  • В группе Ассемблирования в разделе Рамки выберите System.Windows.Forms.
  • Нажмите ОК.

Затем добавьте следующий оператор using с другими в верхней части вашего кода:

using System.Windows.Forms;

Затем добавьте один из следующих Clipboard. SetText в ваш код:

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

И, наконец, добавьте STAThreadAttribute к вашему методу Main следующим образом, чтобы избежать System.Threading.ThreadStateException:

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