我怎么能复制一个字符串(例如“hello”)到系统剪贴板在c#,所以下次我按CTRL+V我会得到“hello”?


当前回答

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

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

然后你可以使用:

Clipboard.SetText(CreateDescription());

其他回答

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

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

然后你可以使用:

Clipboard.SetText(CreateDescription());

我在这个问题上使用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();

这篇文章的功劳在这里

但这只在本地主机上工作,所以不要在服务器上尝试这一点,因为它不会工作。

在服务器端,我使用zeroclipboard。唯一的办法,经过大量研究。

Clipboard.SetText("hello");

您需要使用System. windows . forms或System。Windows命名空间。

如果你不想或者不能使用System.Windows.Forms,你可以使用Windows本地api: user32和剪贴板函数GetClipboardData和SetClipboardDat (pinvoke)

.NET 6包装器库可以在这里找到https://github.com/MrM40/WitWinClipboard/tree/main

有两个类位于不同的程序集和不同的名称空间中。

WinForms:使用以下命名空间声明,确保Main带有[STAThread]属性: 使用System.Windows.Forms; WPF:使用以下命名空间声明 使用System.Windows; 添加对System.Windows的引用。表单,使用以下命名空间声明,确保Main标记有[STAThread]属性。一步一步的指导在另一个答案 使用System.Windows.Forms;

复制一个精确的字符串(在本例中是字面量):

Clipboard.SetText("Hello, clipboard");

要复制文本框的内容,可以使用textbox . copy()或先获取文本,然后设置剪贴板值:

Clipboard.SetText(txtClipboard.Text);

请看这里的例子。 还是……官方MSDN文档或WPF的这里。


备注:

Clipboard is desktop UI concept, trying to set it in server side code like ASP.Net will only set value on the server and has no impact on what user can see in they browser. While linked answer lets one to run Clipboard access code server side with SetApartmentState it is unlikely what you want to achieve. If after following information in this question code still gets an exception see "Current thread must be set to single thread apartment (STA)" error in copy string to clipboard This question/answer covers regular .NET, for .NET Core see - .Net Core - copy to clipboard?