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

时间:2010-08-23 08:57:32

标签: c# clipboard

如何将字符串(例如“hello”)复制到C#中的系统剪贴板,所以下次按 CTRL + V 我会得到“你好”?

6 个答案:

答案 0 :(得分:718)

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

using System.Windows.Forms;

对于WPF:

using System.Windows;

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

Clipboard.SetText("Hello, clipboard");

复制文本框的内容:

Clipboard.SetText(txtClipboard.Text);

See here for an example。 或者...... Official MSDN documentationHere for WPF

答案 1 :(得分:41)

Clipboard.SetText("hello");

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

答案 2 :(得分:36)

我使用WPF C#coping到剪贴板和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();

此帖子here

但是这只适用于localhost,所以不要在服务器上尝试这个,因为它不会起作用。

在服务器端,我是使用zeroclipboard完成的。经过大量研究后,这是唯一的方法。

答案 3 :(得分:36)

对于控制台项目,您需要先逐步添加System.Windows.Forms引用。以下步骤适用于Visual Studio Community 2013 with .NET 4.5:

  1. 解决方案资源管理器中,展开您的控制台项目。
  2. 右键点击参考,然后点击添加参考...
  3. 程序集组的框架下,选择System.Windows.Forms
  4. 点击确定
  5. 然后,在代码顶部添加以下using语句:

    using System.Windows.Forms;
    

    然后,在您的代码中添加以下ClipboardSetText语句之一:

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

    最后,在Main方法中添加STAThreadAttribute,如下所示,以避免System.Threading.ThreadStateException

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

答案 4 :(得分:1)

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;
        }

答案 5 :(得分:1)

在@page AspCompat="true" 中使用的ASP.net web 表单上,将system.windows.forms 添加到您的项目中。 在您的 web.config 添加:

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" />
  </appSettings>

然后你可以使用:

Clipboard.SetText(CreateDescription());