C# 从不同应用程序锁定/解锁剪贴板
我有一个双办公室插件,它使用剪贴板进行通信,例如:将表格或图片从excel复制并粘贴到word。在“复制\粘贴”操作运行时,如果用户复制剪贴板中的内容,则可能会损坏剪贴板中的数据。在第一个应用程序中,我在复制之后尝试锁定剪贴板,在第二个应用程序中,我在粘贴之前尝试解锁剪贴板 我可以在一个应用程序中锁定剪贴板,但无法在另一个应用程序中解锁它 这是一个带有剪贴板包装器的类C# 从不同应用程序锁定/解锁剪贴板,c#,.net,c#-4.0,ms-office,clipboard,C#,.net,C# 4.0,Ms Office,Clipboard,我有一个双办公室插件,它使用剪贴板进行通信,例如:将表格或图片从excel复制并粘贴到word。在“复制\粘贴”操作运行时,如果用户复制剪贴板中的内容,则可能会损坏剪贴板中的数据。在第一个应用程序中,我在复制之后尝试锁定剪贴板,在第二个应用程序中,我在粘贴之前尝试解锁剪贴板 我可以在一个应用程序中锁定剪贴板,但无法在另一个应用程序中解锁它 这是一个带有剪贴板包装器的类 public class MyClipboard { [DllImport("user32.dll",
public class MyClipboard
{
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool OpenClipboard(IntPtr hwnd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool CloseClipboard();
public void Close()
{
CloseClipboard();
}
public void Open()
{
OpenClipboard(IntPtr.Zero);
}
}
首次申请:
MyClipboard clipboard = new MyClipboard();
clipboard.Open();
...
MyClipboard clipboard = new MyClipboard();
clipboard.Close();
...
第二项申请:
MyClipboard clipboard = new MyClipboard();
clipboard.Open();
...
MyClipboard clipboard = new MyClipboard();
clipboard.Close();
...
如何从一个应用程序打开剪贴板,然后从另一个应用程序关闭剪贴板
谢谢 与其使用剪贴板在应用程序之间共享数据(正如您所说,用户可以修改剪贴板),不如使用
- 共享已知文件(某些文件处于监视状态)可能会很慢
- 命名管道(可能过于复杂)
- WCF(大规模超压)
- 内存映射文件(在.NET中可能是硬文件)
David请共享
CloseClipboard()
的bool结果以及相应的GetLastError()
。可能只能从OpenClipboard
中指定的相同HWND
调用CloseClipboard
。请记住,提供剪贴板是为了方便用户,而不是程序员。您试图执行的操作(阻止用户使用剪贴板)是错误的。@ChrisThornton虽然您的观点通常是正确的,但office加载项访问的API与VBA脚本大致相同,这意味着它基本上只是用于用户自动化。有些封送的COM对象没有正确地公开给您的代码,但可以复制粘贴(例如,您可以通过复制粘贴来移动PPT幻灯片,但希望您能以任何其他方式移动它)。