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

本文关键字:应用程序 解锁 剪贴板 锁定 | 更新日期: 2023-09-27 17:51:21

我有一个two office插件,它使用剪贴板进行通信,例如:从excel复制和粘贴表格或图片到word。当复制/粘贴操作运行时,如果用户在剪贴板中复制某些内容,用户可能会损坏剪贴板中的数据。在第一个应用程序中,复制后,锁定剪贴板,在第二个应用程序中,粘贴之前,解锁剪贴板

我可以在一个应用程序中锁定剪贴板,但不能在另一个应用程序中解锁

这个类带有剪贴板

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

我应该怎么做从一个应用程序打开剪贴板,并从另一个应用程序关闭剪贴板?

谢谢!

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

比起使用剪贴板在你的应用程序之间共享数据(正如你所说的用户可以修改剪贴板),我会使用像

这样的东西
  • 共享已知文件(有文件监视)可能很慢
  • 命名管道(可能过于复杂)
  • WCF (massive overkill)
  • 内存映射文件(可能在。net中很难)http://msdn.microsoft.com/en-us/library/ms810613.aspx
这里有一些其他的想法。在两个c#进程之间进行进程间通信的最简单方法是什么?

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

HTH。大卫。