c# - 使用 C# Interop 清除/清空办公室剪贴板

标签 c# office-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();
        }
    }
}

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

最佳答案

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

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

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

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

关于c# - 使用 C# Interop 清除/清空办公室剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33037234/

相关文章:

c# - 如何将多个异步方法设置到队列中?

Excel C# 互操作与 Excel VBA

c# - Microsoft.Office.Interop.* 版本 12 和 14 之间有什么区别?

vba - 获取瀑布图的类别名称

c# - 在c#中添加水印图片

c# - 如何在基 Controller 类中使用 RedirectToAction?

c# - 引用 DLL 未在 Visual Studio 2010 中加载

c# - ASP.NET Core 2.1 中的 UseStaticFiles、UseSpaStaticFiles 和 UseSpa 有什么区别?

c# - 从 Visual Studio for C# 的流畅接口(interface)类智能感知中隐藏 GetHashCode/Equals/ToString?

c# - 使用c#删除书签的内容而不删除ms word中的书签