Clearing/Emptying 使用 C# Interop 的办公室剪贴板

Clearing/Emptying office clipboard using C# Interop

我正在开发一个应用程序,点击一个按钮即可清除系统剪贴板和办公室剪贴板。

我试过 System.Windows.Forms.Clipboard.Clear() 和以下

static class WinAPI
{
    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
    static extern bool OpenClipboard(System.IntPtr WinHandle);
    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
    static extern bool EmptyClipboard();
    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
    static extern bool CloseClipboard();
    public static void ClearClipboard()
    {
        if (OpenClipboard(System.IntPtr.Zero))
        {
            EmptyClipboard();
            CloseClipboard();
        }
    }
}

他们俩似乎都清楚只有系统剪贴板。有没有办法将其扩展到办公室剪贴板。

您可以尝试提供的解决方案 here。它适用于 VBA,但您可以轻松地将代码转换为 C#。

如果您需要帮助,请告诉我。

根据 this question,答案似乎是 "no, not cleanly":

There has been no VBA support for manipulating the Office clipboard after Excel 2000. SendKeys is flaky, but it's the only way.

所指的 "SendKeys" 是一个 "solution",您可以在其中发送必要的击键或 window 消息——假设一个是 运行,否则,您将必须开始一个。还有其他方法可以做到这一点,例如 AutoIt。不幸的是,所有这些解决方案都很脆弱并且容易在 Office 版本之间中断,因为它们依赖于 window 名称和外观的内部细节。在执行此操作之前,请确保您愿意接受维护负担。

一个更好的方法可能是告诉任何想要这个应用程序的人它不能完成,因为微软希望剪贴板控制权保留在最终用户手中——或者,已经有一个用于清除剪贴板的按钮,它存在于 Office 中(Alt、H、FO 在我的版本中显示它)。这并不总是有效,但当它有效时,它会为您节省大量工作。

你可以复制一个space到剪贴板,其他方法麻烦吗?