我试图写一个小的应用程序,需要使用剪贴板的一些功能。 因为我不希望目前覆盖剪贴板中的用户数据,我决定将它保存到内存中,做好我的工作,然后将它写回。 下面的代码是一个控制台应用程序是什么,我试图做一个准系统的例子。
我遇到的问题是恢复状态。 如果我复制的东西从Visual Studio剪贴板中运行应用程序之前共有剪贴板(各种字符串格式和语言环境)六个对象,所有获得放入缓存都是。 一旦我恢复他们虽然只有语言环境中的剪贴板,它似乎每次调用的SetData()将覆盖上。 (顺便说一下SetDataObject似乎并没有成为GetDataObject的倒数,所以我不能只是使用)
任何想法如何,我可以存储剪贴板状态,后来恢复了吗?
[STAThread]
static void Main(string[] args)
{
//Store the old clipboard data
Dictionary<string, object> clipboardCache = new Dictionary<string, object>();
IDataObject clipboardData = Clipboard.GetDataObject();
foreach (string format in clipboardData.GetFormats())
{
clipboardCache.Add(format, clipboardData.GetData(format));
}
Clipboard.SetText("Hello world!");
string value = Clipboard.GetText();
Console.WriteLine(value);
//Clear the clipboard again and restore old data
Clipboard.Clear();
foreach (KeyValuePair<string, object> valuePair in clipboardCache)
{
Clipboard.SetData(valuePair.Key, valuePair.Value);
Thread.Sleep(100);
}
Console.ReadLine();
}