请求的剪贴板操作失败

时间:2010-08-05 03:38:04

标签: vb.net clipboard

我使用的是vb.net 2003,有些时候会出现此错误。任何人都可以知道这个错误是如何产生的,以及如何解决它?

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

3 个答案:

答案 0 :(得分:5)

我用谷歌搜索了这个问题,看看我看到了什么,很多人都提出了这个问题,而且没有一个人能得到一个可靠的答案......

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

  

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

     

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

     

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

     

可能需要特别考虑   使用元文件时必需   格式与剪贴板。由于一个   当前的限制   DataObject的实现   class,使用的元文件格式   可能无法识别.NET Framework   由使用旧版本的应用程序   元文件格式。在这种情况下,你   必须与Win32互操作   剪贴板应用程序编程   接口(API)。更多   信息,见文章323530,   “剪贴板上的图元文件不是   所有应用程序都可见,“在所有应用程序中   Microsoft知识库   http://support.microsoft.com

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

有趣的是,这可以理解我在自己的应用程序中发现的一种奇怪的行为。我有一个应用程序写入Excel电子表格(实际上,数百个,每个修改数百个单元格)。我根本不使用剪贴板,只使用exop的Interop API,但是当它运行时,每次创建新的电子表格时我的剪贴板都会清除。在我的情况下,Excel正在弄乱剪贴板,即使没有明显的理由这样做。我会把它归结为我们凡人永远无法理解的那些神秘的Windows现象之一。

无论如何,多亏了你的问题,我想我理解我的问题,所以+1给你帮助我。

答案 1 :(得分:1)

我在尝试时遇到了这个错误:

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

为了解决这个问题,我用Clipboard.Clear()中的一些方法替换user32.dll

[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版本。

答案 2 :(得分:0)

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