如何在C#中将数据复制到剪贴板

How to copy data to clipboard in C#

如何将字符串(例如"hello")复制到C中的系统剪贴板,因此下次按CTRL+V时,我将得到"hello"?


您需要一个命名空间声明:

1
using System.Windows.Forms;

或为WPF:

1
using System.Windows;

要复制一个精确的字符串(在本例中为文字):

1
Clipboard.SetText("Hello, clipboard");

要复制文本框的内容:

1
Clipboard.SetText(txtClipboard.Text);

请参阅此处以获取示例。或者…官方的msdn文件或WPF文件。


1
Clipboard.SetText("hello");

您需要使用System.Windows.FormsSystem.Windows名称空间。


对于逐步进行的控制台项目,必须首先添加System.Windows.Forms引用。以下步骤适用于Visual Studio Community 2013和.NET 4.5:

  • 在解决方案资源管理器中,展开控制台项目。
  • 右键单击引用,然后单击添加引用…
  • 在"装配"组的"框架"下,选择"EDOCX1"〔0〕。
  • 单击确定。
  • 然后,在代码顶部添加以下using语句和其他语句:

    1
    using System.Windows.Forms;

    然后,在代码中添加以下Clipboard.SetText语句之一:

    1
    2
    3
    Clipboard.SetText("hello");
    // OR
    Clipboard.SetText(helloString);

    最后,在您的Main方法中添加STAThreadAttribute以避免System.Threading.ThreadStateException的出现:

    1
    2
    3
    4
    5
    [STAThreadAttribute]
    static void Main(string[] args)
    {
      // ...
    }


    我在使用wpf c处理剪贴板和System.Threading.ThreadStateException这一问题上的经验是,我的代码在所有浏览器中都能正常工作:

    1
    2
    3
    4
    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完成的。唯一的办法,经过大量的研究。