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


当前回答

这在。net core上工作,不需要引用System.Windows.Forms

using Windows.ApplicationModel.DataTransfer;

DataPackage package = new DataPackage();
package.SetText("text to copy");
Clipboard.SetContent(package);

它是跨平台的。在windows上,您可以按windows + V查看剪贴板历史记录

其他回答

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

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?

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

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

这在。net core上工作,不需要引用System.Windows.Forms

using Windows.ApplicationModel.DataTransfer;

DataPackage package = new DataPackage();
package.SetText("text to copy");
Clipboard.SetContent(package);

它是跨平台的。在windows上,您可以按windows + V查看剪贴板历史记录

如果您不想将线程设置为STAThread,请使用Clipboard。SetDataObject sthhere(对象):

Clipboard.SetDataObject("Yay! No more STA thread!");
Clipboard.SetText("hello");

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