使用c#互操作清除/清空办公室剪贴板



我正在研究一个应用程序,该应用程序在点击按钮时将清除系统剪贴板和办公室剪贴板。

我已经尝试了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();
        }
    }
}

两者似乎都清楚,只有系统剪贴板。有没有办法把它扩展到办公室剪贴板?

对于这个问题,答案似乎是"不,不干净":

没有VBA支持来操作Office剪贴板Excel 2000之后。SendKeys是不可靠的,但它是唯一的方法。

引用的"SendKeys"是一种"解决方案",您可以在其中发送必要的击键或窗口消息——假设其中一个正在运行,如果没有,则必须启动一个。还有其他方法可以做到这一点,比如AutoIt。不幸的是,所有这些解决方案都很脆弱,容易在Office的不同版本之间中断,因为它们依赖于窗口名称和外观的内部细节。在此之前,请确保您愿意承担维护负担。

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

如果其他方法麻烦,您可以将单个空格复制到剪贴板。

您可以尝试这里提供的解决方案。这意味着VBA,但你可以很容易地将代码转换为c#。

如果你需要帮助就告诉我。

最新更新