Каким образом ваш код выше не работал? Когда я пробую эквивалентный код в C #, я получаю исключение «CloseClipboard Failed (исключение из HRESULT: 0x800401D4 (CLIPBRD_E_CANT_CLOSE))» »при вызове Clipboard.SetDataObject (iData).
Тем не менее, следующий обходной путь делает работу за меня:
// save
Dictionary<String, Object> d = new Dictionary<String, Object>();
IDataObject ido = Clipboard.GetDataObject();
foreach (String s in ido.GetFormats(false))
d.Add(s, ido.GetData(s));
// ...
// restore
var da = new DataObject();
foreach (String s in d.Keys)
da.SetData(s, d[s]);
Clipboard.SetDataObject(da);