有没有办法保存剪贴板的内容?我尝试了以下代码,但它不起作用。
Dim iData As IDataObject = Clipboard.GetDataObject()
...(use clipboard)
Clipboard.SetDataObject(iData)
谢谢。
答案 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;
请注意,这适用于表格和格式化文本。