使用c#互操作清除/清空办公室剪贴板
本文关键字:清空 办公室 剪贴板 清除 互操作 使用 | 更新日期: 2023-09-27 18:16:59
我正在研究一个应用程序,该应用程序在点击按钮时将清除系统剪贴板和办公室剪贴板。
我已经尝试了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#。
如果你需要帮助就告诉我。