4

有没有办法保留剪贴板的内容?我尝试了以下代码,但它不起作用。

Dim iData As IDataObject = Clipboard.GetDataObject()
...(use clipboard)
Clipboard.SetDataObject(iData)

谢谢你。

4

4 回答 4

3

保留剪贴板内容的最简单方法是不使用剪贴板。剪贴板是用户的临时存储区域,而不是应用程序的临时存储区域,因此您尝试做的事情可能比破坏剪贴板更好的解决方案。

于 2009-05-28T21:38:26.843 回答
0

您上面的代码以什么方式不起作用?当我在 C# 中尝试等效代码时,在调用 Clipboard.SetDataObject(iData) 时出现“CloseClipboard 失败(来自 HRESULT 的异常:0x800401D4 (CLIPBRD_E_CANT_CLOSE))”异常。

但是,以下解决方法为我完成了这项工作:

// 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);
于 2009-12-16T22:27:13.243 回答
0

您可以使用 OpenClipboard 和 CloseClipboard。根据MSDN ,打开剪贴板将阻止其他应用程序更改数据。

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern bool OpenClipboard(IntPtr hWndNewOwner);

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern bool CloseClipboard();
于 2009-05-28T21:55:54.720 回答
0

我同意上下文很重要。就我而言,我想将格式化的、动态填充的封面文档粘贴到一些动态生成的文本(全部在 MS Word 中)的前面。这是我找到的解决方案(使用 VSTO 和 C#):

                object start = 0;
                Word.Range startRng = a_TreatedDocument.Range(ref start, ref start);
                startRng.FormattedText = a_CoverPageDocument.Content.FormattedText;

请注意,这适用于表格和格式化文本。

于 2010-07-12T22:35:42.373 回答