从文件网站和桌面复制文件时,C#Clipboard.ContainsImage()的工作方式不同

从文件网站和桌面复制文件时,C#Clipboard.ContainsImage()的工作方式不同,c#,clipboard,clipboard-pictures,C#,Clipboard,Clipboard Pictures,我在调查一件有趣的事情。我想在我的C#程序中从剪贴板获取图像 代码示例: [STAThread] public Image GetClipboardImage() { MessageBox.Show("try to get image"); Image returnImage = null; if (Clipboard.ContainsImage()) { MessageBox.Show("getting image"); retu

我在调查一件有趣的事情。我想在我的C#程序中从剪贴板获取图像

代码示例:

[STAThread]
public Image GetClipboardImage()
{
    MessageBox.Show("try to get image");
    Image returnImage = null;
    if (Clipboard.ContainsImage())
    {
        MessageBox.Show("getting image");
        returnImage = Clipboard.GetImage();
    }
    return returnImage;
}
当我尝试从任何网站获取复制到剪贴板的图像时,上面的代码都非常有效。但是当我从我的电脑(例如桌面)复制一个图像时,它就不起作用了
Clipboard.ContainsImage()
在第二种情况下返回
false

从web复制和从桌面复制的另一个区别是: 在第一种情况下,我无法将图像从剪贴板粘贴到计算机上的文件夹。 当然,在第二种情况下,这是可以做到的。 在第二种情况下,似乎有一个真实图像和一个包含此图像的文件。但我不确定是否可以


那么,在我的情况下有什么问题以及如何解决它呢?

下面的代码将演示一个合适的解决方案

IDataObject myDataObject = Clipboard.GetDataObject();
string[] files = (string[])myDataObject.GetData(DataFormats.FileDrop);
MessageBox.Show(files[0]);

您将显示massagebox,其中包含您以前复制到剪贴板的文件的完整路径。

您是通过右键单击复制图像从web复制图像,还是通过右键单击复制图像文件在磁盘上复制图像?我想这两者是不同的。我试着用鼠标右键单击和Ctrl+C进行复制,我看不出从web复制和从磁盘复制之间有什么区别。我只是再次检查了一下,没有什么区别。你的假设是正确的——复制文件时,会将对文件的引用放在剪贴板中,同时复制图像(比如说网络、油漆之类的)将图像放在剪贴板上。您可能希望检查剪贴板是否包含字符串,然后检查它是否存在,然后检查该文件是否是图像。让我澄清一下。我尝试复制的不是图像的文件,而是精确的图像。我的意思是,首先在Windows照片查看器中打开文件,然后单击“右键->复制”