请求的剪贴板操作失败

问题描述 投票:0回答:4

我使用的是 vb.net 2003,有时会出现此错误。谁能知道这个错误是如何产生的以及如何修复它?

错误:请求的剪贴板操作失败

vb.net clipboard
4个回答
5
投票

我用谷歌搜索了这个问题,看看我会看到什么,很多人都问过这个问题,但没有人得到可靠的答案......

所以我查阅了 MSDN 文档,找到了一条注释,解释了大多数提出这个问题的人的描述……当用户在代码运行时切换到另一个应用程序时,通常会出现这种症状。下面引用了该注释,并附有以下文档的链接:

所有基于 Windows 的应用程序共享 系统剪贴板,所以内容 当您切换时可能会发生变化 到另一个应用程序。

对象必须可序列化 放在剪贴板上。如果你 将不可序列化的对象传递给 剪贴板方法,该方法会失败 不抛出异常。看 System.Runtime.Serialization 了解更多 有关序列化的信息。如果你的 目标应用程序需要非常 特定数据格式,标题 添加到序列化中的数据中 进程可能会阻止应用程序 识别您的数据。到 保留您的数据格式,添加您的 将数据作为字节数组传输到 MemoryStream 并将 MemoryStream 传递给 SetData 方法。

Clipboard类只能使用 在设置为单线程的线程中 公寓(STA)模式。要使用这个 类,确保您的 Main 方法是 用 STAThreadAttribute 标记 属性。

可能需要特别考虑 使用图元文件时必需的 使用剪贴板格式化。由于一个 目前的限制 数据对象的实现 类,使用的图元文件格式 .NET Framework 可能无法识别 通过使用较旧版本的应用程序 图元文件格式。在这种情况下,你 必须与 Win32 互操作 剪贴板应用程序编程 接口(API)。了解更多 信息,请参阅文章 323530, “剪贴板上的图元文件不是 对所有应用程序可见” Microsoft 知识库位于 http://support.microsoft.com

http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx

有趣的是,这解释了我在自己的一个应用程序中注意到的奇怪行为。我有一个应用程序可以写入 Excel 电子表格(实际上,可以写入数百个电子表格,每个电子表格修改数百个单元格)。我根本不使用剪贴板,只使用 Excel 的 Interop API,但是当它运行时,每次创建新电子表格时我的剪贴板都会被清除。就我而言,Excel 会弄乱剪贴板,即使没有明显的理由这样做。我将其归因于我们凡人永远无法理解的神秘 Windows 现象之一。

无论如何,感谢您的问题,我想我理解了我的问题,所以为您的帮助+1。


4
投票

我在尝试时遇到错误:

Clipboard.Clear();
...
Clipboard.SetText(...);

为了解决这个问题,我将

Clipboard.Clear()
替换为
user32.dll
中的 pinvoking 一些方法:

[DllImport("user32.dll")]
static extern IntPtr GetOpenClipboardWindow();

[DllImport("user32.dll")]
private static extern bool OpenClipboard(IntPtr hWndNewOwner);

[DllImport("user32.dll")]
static extern bool EmptyClipboard();

[DllImport("user32.dll", SetLastError=true)]
static extern bool CloseClipboard();

...

IntPtr handleWnd = GetOpenClipboardWindow();
OpenClipboard(handleWnd);
EmptyClipboard();
CloseClipboard();

...

Clipboard.SetText(...);

我在这里使用 C#,但可以轻松地从中创建 vb 版本。


0
投票

UltraVNC 是否有可能正在运行。当该应用程序在客户端 PC 端后台运行时,我遇到问题。当我关闭VNC时,我可以成功复制到剪贴板。这并不是一个真正令人满意的解决方案,但至少在我的例子中我知道问题的根源。


0
投票

我遇到了这个问题,并且它是间歇性的,我的代码有 60% 的时间失败。使用 Visual Studio 我发现问题是剪贴板读取。阅读大卫的详细帖子后,我有足够的附加信息来解决我的问题。我最近对计算机环境进行了两次更改。我已经开始使用 DropBox 和 Chrome 远程桌面。

Chrome 桌面在计算机之间共享剪贴板,因此我怀疑这是原因。当我停止使用远程桌面时,问题并没有消失,因此我禁用了 Dropbox,问题就消失了,并且在远程桌面处于活动状态时也不存在。我不理解也不喜欢 dropbox 积极访问剪贴板的想法,所以我不再使用它。我本可以在发生故障时向我的代码添加错误处理并继续使用 Dropbox,但我不会使用在我不知情的情况下访问我的剪贴板的程序。大安全问题。

© www.soinside.com 2019 - 2024. All rights reserved.