我正在尝试编写一个需要使用剪贴板来实现某些功能的小应用程序.由于我不想覆盖当前在剪贴板中的用户数据,我决定将其保存到内存中,完成我的工作然后将其写回.下面的代码是一个控制台应用程序,它是我正在尝试做的准系统示例.
我遇到的问题是恢复状态.如果我在运行应用程序之前从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();
}
Run Code Online (Sandbox Code Playgroud)
Windows剪贴板一次只有一个对象.但是,有一种对象可以使用多种格式(例如RTF,Text,HTML).我认为你太复杂了,你的代码应该是这样的:
//Store the old clipboard data
IDataObject clipboardData = Clipboard.GetDataObject();
Clipboard.SetText("Hello world!");
string value = Clipboard.GetText();
Console.WriteLine(value);
//Clear the clipboard again and restore old data
Clipboard.Clear();
Clipboard.SetDataObject(clipboardData);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3001 次 |
| 最近记录: |