回答:
異なるアセンブリと異なる名前空間に存在する2つのクラスがあります。
WinForms:次の名前空間宣言を使用Main
し[STAThread]
ます。属性がマークされていることを確認してください:
using System.Windows.Forms;
WPF:次の名前空間宣言を使用します
using System.Windows;
コンソール:への参照を追加しSystem.Windows.Forms
、次の名前空間宣言を使用して、属性Main
でマークされていることを確認し[STAThread]
ます。別の回答のステップバイステップガイド
using System.Windows.Forms;
正確な文字列(この場合はリテラル)をコピーするには:
Clipboard.SetText("Hello, clipboard");
テキストボックスの内容をコピーするには、TextBox.Copy()を使用するか、最初にテキストを取得してから、クリップボードの値を設定します。
Clipboard.SetText(txtClipboard.Text);
例については、こちらをご覧ください。または... MSDNの公式ドキュメントまたはWPFのこちら。
備考:
クリップボードはデスクトップUIの概念であり、ASP.Netなどのサーバー側のコードで設定しようとすると、サーバーに値が設定されるだけで、ユーザーがブラウザーで表示できる内容に影響はありません。リンクされた回答SetApartmentState
では、クリップボードアクセスコードをサーバー側で実行することができますが、達成したいことはほとんどありません。
この質問コードの情報に従っても例外が発生する場合は、「現在のスレッドはシングルスレッドアパートメント(STA)に設定する必要があります」というエラーを参照してください。
この質問/回答は通常の.NETを対象としています。.NETCoreの場合-.Net Core-クリップボードにコピーしますか?
以下のためのコンソールステップ・バイ・ステップ方式でプロジェクトには、最初に追加する必要がありますSystem.Windows.Forms
参照を。以下の手順は、.NET 4.5を使用するVisual Studio Community 2013で機能します。
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)
{
// ...
}
StackOverflowException
直前STAThreadAttribute
にあります=)
クリップボードへのWPF C#の対処を使用したこの問題の私の経験と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();
この投稿のクレジットはこちら
ただし、これはlocalhostでのみ機能するため、サーバーでは機能しないため、試さないでください。
サーバー側では、を使用してそれを行いましたzeroclipboard
。多くの研究の後、唯一の方法です。
Clipboard.SetText("hello");
そのためにはSystem.Windows.Forms
またはSystem.Windows
名前空間を使用する必要があります。
Clip.exeは、クリップボードを設定するためのWindowsの実行可能ファイルです。これはWindows 以外のオペレーティングシステムでは機能しないことに注意してください。
/// <summary>
/// Sets clipboard to value.
/// </summary>
/// <param name="value">String to set the clipboard to.</param>
public static void SetClipboard(string value)
{
if (value == null)
throw new ArgumentNullException("Attempt to set clipboard with null");
Process clipboardExecutable = new Process();
clipboardExecutable.StartInfo = new ProcessStartInfo // Creates the process
{
RedirectStandardInput = true,
FileName = @"clip",
};
clipboardExecutable.Start();
clipboardExecutable.StandardInput.Write(value); // CLIP uses STDIN as input.
// When we are done writing all the string, close it so clip doesn't wait and get stuck
clipboardExecutable.StandardInput.Close();
return;
}