Я пытаюсь написать небольшое приложение, которое должно использовать буфер обмена для некоторых функций. Поскольку я не хочу перезаписывать данные пользователя, которые в настоящее время находятся в буфере обмена, я решил сохранить их в памяти, выполнить свою работу, а затем записать их обратно. Приведенный ниже код представляет собой консольное приложение, которое является простейшим примером того, что я пытаюсь сделать.
У меня проблема с восстановлением состояния. Если я скопирую что-то в буфер обмена из 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();
}