Estranheza com acesso à área de transferência
Eu estou tentando escrever um pequeno aplicativo que precisa usar a área de transferência para alguma funcionalidade. Como eu não quero sobrescrever os dados do usuário atualmente na área de transferência, decidi salvá-lo na memória, fazer meu trabalho e depois escrevê-lo de volta. O código abaixo é um aplicativo de console que é um exemplo básico do que estou tentando fazer.
O problema que estou tendo é restaurar o estado. Se eu copiar algo para a área de transferência do Visual Studio antes de executar o aplicativo, haverá um total de seis objetos na área de transferência (vários formatos de seqüência de caracteres e um código de idioma), todos colocados no cache. Uma vez que eu restaurá-los embora apenas a localidade está na área de transferência e aparece cada chamada para SetData () sobrescreve o último. (a propósito, SetDataObject não parece ser o inverso de GetDataObject, então eu não posso simplesmente usar isso)
Alguma idéia de como eu posso armazenar o estado da área de transferência e restaurá-lo mais tarde?
[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();
}