web-dev-qa-db-ja.com

C#でクリップボードにデータをコピーする方法

C#でシステムクリップボードに文字列( "hello"など)をコピーするにはどうすればよいですか。 CTRL+V 「こんにちは」をもらえますか。

380
aharon

名前空間宣言が必要です。

using System.Windows.Forms;

またはWPFの場合:

using System.Windows;

正確な文字列(この場合はリテラル)をコピーするには:

Clipboard.SetText("Hello, clipboard");

テキストボックスの内容をコピーするには:

Clipboard.SetText(txtClipboard.Text);

例はここを見てください 。または... MSDNの公式ドキュメント または WPFの場合

708
Clipboard.SetText("hello");

そのためにはSystem.Windows.FormsまたはSystem.Windows名前空間を使用する必要があります。

41
Bradley Smith

クリップボードとSystem.Threading.ThreadStateExceptionに対処するWPF C#を使用したこの問題に関する私の経験は、すべてのブラウザで正しく動作した私のコードを使ったものです。

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を使用してそれを行いました。唯一の方法は、たくさんの研究の後です。

36
BMaximus

段階的な方法でconsoleプロジェクトを作成するには、まずSystem.Windows.Forms参照を追加する必要があります。次の手順は、.NET 4.5を搭載したVisual Studio Community 2013で機能します。

  1. ソリューションエクスプローラーで、コンソールプロジェクトを展開します。
  2. Referencesを右クリックし、次にAdd Reference ...をクリックします。
  3. AssembliesグループのFrameworkの下で、System.Windows.Formsを選択します。
  4. OKをクリックします。

次に、コードの先頭に、次のusingステートメントを他のステートメントと共に追加します。

using System.Windows.Forms;

次に、以下の ClipboardSetText ステートメントのいずれかをコードに追加します。

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

そして最後に、System.Threading.ThreadStateExceptionを避けるために、次のように STAThreadAttributeMainメソッドに追加します。

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