C#备份和恢复剪贴板

use*_*444 7 c# clipboard winforms

我有一个使用剪贴板的程序,但我希望在完成后将剪贴板恢复到以前的状态.

这是我的代码:

IDataObject temp = Clipboard.GetDataObject();

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

Clipboard.SetDataObject(temp);
Run Code Online (Sandbox Code Playgroud)

但是,如果我复制一个文本,并运行此代码,我在记事本上什么也得不到.

注意:我不能使用Clipboard.Contains,因为我想保留剪贴板EXACLY之前的状态,即使用户复制了一个文件.

And*_*uus 3

我无法确认这是否有效,但我认为您没有理由不能使用实际读取数据并随后恢复数据的较长方法来备份数据。

阅读此处: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);
Run Code Online (Sandbox Code Playgroud)