从不同的应用程序锁定/解锁剪贴板

时间:2014-03-21 11:31:11

标签: c# .net c#-4.0 ms-office clipboard

我有一个两个办公室加载项,使用剪贴板进行通信,例如:将表格或图片从excel复制粘贴到word。当copy \ paste操作运行时,如果用户在剪贴板中复制某些内容,则用户可以破坏剪贴板中的数据。我在第一个应用程序中复制后尝试锁定剪贴板,在第二个应用程序中粘贴之前解锁剪贴板

我可以在一个应用程序中锁定剪贴板,但无法在其他应用程序中解锁它

这是包含剪贴板

包装的类
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();
    ...

如何从一个应用程序打开剪贴板,从另一个应用程序关闭剪贴板?

谢谢!

1 个答案:

答案 0 :(得分:1)

而不是使用剪贴板在您的应用之间共享数据(正如您所说,用户可以修改剪贴板)我会使用类似

的内容

这是其中一些想法.. What is the simplest method of inter-process communication between 2 C# processes?

如果您真的想使用剪贴板,可以在格式中添加一些额外的自定义属性,以确保用户自己没有使用剪贴板。但以这种方式使用剪贴板似乎是不好的做法,但那是我的选择。

HTH。 大卫