为什么需要备份IDataObject
?
如果在所有情况下都可能,它看起来像这样
备份
// expiremental list of formats to exclude. Doesn't cover all possible cases but most of it.
private static readonly string[] clipboardMetaFormats = { "application/x-moz-nativeimage", "FileContents", "EnhancedMetafile", "System.Drawing.Imaging.Metafile", "MetaFilePict", "Object Descriptor", "ObjectLink", "Link Source Descriptor", "Link Source", "Embed Source", "Hyperlink" };
private DataObject ReadClipboard()
{
DataObject result = new DataObject();
IDataObject dataObject = Clipboard.GetDataObject();
string[] formats = dataObject.GetFormats()?.Except(clipboardMetaFormats).ToArray() ?? Array.Empty<string>();
foreach (string format in formats)
{
try
{
object data = dataObject.GetData(format);
if (data != null) result.SetData(format, data);
}
catch (ExternalException ex)
{
Debug.WriteLine($"Error {ex.ErrorCode}: {ex.Message}");
}
}
return result;
}
DataObject backup = ReadClipboard();
然后您可以将其用作本地数据存储。例如,如果您想更改Clipboard
,请使用更改后的值,例如将其粘贴到某个应用程序中,然后将以前的数据恢复到Clipboard
.
恢复
private void UpdateClipboard(DataObject data)
{
if (data == null) return;
try
{
Clipboard.SetDataObject(data);
}
catch (ExternalException ex)
{
Debug.WriteLine($"Error {ex.ErrorCode}: {ex.Message}");
}
}
UpdateClipboard(backup);
但在你的情况下,这是一个简单的string
. 你可以这样做:
string text = Clipboard.GetText(TextDataFormat.UnicodeText);
Clipboard.SetText(text, TextDataFormat.UnicodeText);