C# 备份和恢复剪贴板

标签 c# winforms clipboard

我有一个使用剪贴板的程序,但我想在完成后将剪贴板恢复到原来的状态。

这是我的代码:

IDataObject temp = Clipboard.GetDataObject();

//Some stuff that change Cliboard here
Clipboard.SetText("Hello");
//Some stuff that change Cliboard here

Clipboard.SetDataObject(temp);

但是如果我复制文本并运行这段代码,记事本上什么也得不到。

注意:我不能使用 Clipboard.Contains,因为我想完全保留剪贴板之前的样子,即使用户复制了文件也是如此。

最佳答案

我无法确认这是否行得通,但我看不出有什么理由不能使用实际读取数据并在事后恢复数据的较长方法来备份数据。

阅读此处:http://msdn.microsoft.com/en-us/library/system.windows.forms.idataobject.aspx

你会做类似(伪代码)的事情

//Backup
var lBackup = new Dictionary<string, object>();
var lDataObject = Clipboard.GetDataObject();
var lFormats = lDataObject.GetFormats(false);
foreach(var lFormat in lFormats)
{
  lBackup.Add(lFormat, lDataObject.GetData(lFormat, false));
}

//Set test data
Clipboard.SetText("asd");

//Would be interesting to check the contents of lDataObject here

//Restore data
foreach(var lFormat in lFormats)
{
  lDataObject.SetData(lBackup[lFormat]);
}
//This might be unnecessary
Clipboard.SetDataObject(lDataObject);

关于C# 备份和恢复剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6262454/

相关文章:

c# - 使用 C# 更新 facebook 状态

c# - 关于 string.compare 方法

c# - 多个包括使用 Entity Framework 和存储库模式

vb.net - 在表单之间寻址公共(public)变量时使用实例或表单名称?

c# - 尝试以编程方式创建和打开新的 Outlook 电子邮件

c# - 修改 Visual Studio 2013 的模拟器/设备列表

c# - 将文本加载到数据 GridView

python - pynput 不发送 ctrl+c 来复制选中的文本

Python获取mac剪贴板内容

java - 如何防止剪贴板监视器复制剪贴板数据两次?