我正在开发一个应用程序,点击一个按钮即可清除系统剪贴板和办公室剪贴板。
我已经尝试了 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/