如何保留剪贴板的内容

时间:2009-05-28 21:35:56

标签: .net clipboard

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

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

谢谢。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

[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();

答案 2 :(得分: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);

答案 3 :(得分:0)

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

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

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