【问题标题】:Clearing/Emptying office clipboard using C# Interop使用 C# Interop 清除/清空办公室剪贴板
【发布时间】:2015-10-09 11:32:38
【问题描述】:

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

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

它们似乎都只有系统剪贴板清晰。有没有办法将此扩展到办公室剪贴板。

【问题讨论】:

    标签: c# office-interop


    【解决方案1】:

    根据this question,答案似乎是“不,不干净”:

    没有用于操作 Office 剪贴板的 VBA 支持 在 Excel 2000 之后。SendKeys 很不稳定,但它是唯一的方法。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-26
          • 2015-12-20
          • 2018-10-09
          • 1970-01-01
          相关资源
          最近更新 更多