有没有方法可以保存剪贴板的内容?我尝试了以下代码,但它没有起作用。
Dim iData As IDataObject = Clipboard.GetDataObject()
...(use clipboard)
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);
我认为上下文很重要。在我的情况下,我想将一个格式化的、动态填充的封面页文档粘贴到一些动态生成的文本前面(都在MS Word中)。这是我找到的解决方案(使用VSTO和C#):
object start = 0;
Word.Range startRng = a_TreatedDocument.Range(ref start, ref start);
startRng.FormattedText = a_CoverPageDocument.Content.FormattedText;
您可以使用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();