如何从剪贴板获取屏幕截图

本文关键字:获取 屏幕截图 剪贴板 | 更新日期: 2023-09-27 18:06:51

我试着从剪贴板中获取一个截图。我编写了以下由PRINT-Key触发的代码:

IDataObject obj = Clipboard.GetDataObject();
var formats = obj.GetFormats();

但是"格式"是空的。所有的教程在www告诉我这样做,但我不能解释上述行为。

(我在Windows 7 x64上使用c# with .NET 4.0)

如何从剪贴板获取屏幕截图

您尝试过Clipboard.GetImage();方法吗?

下面是MSDN示例

Image GetClipboardImage()
{
    if (Clipboard.ContainsImage())
    {
         return Clipboard.GetImage();
    }
    // add error handling
}

您是否尝试调用GetImage方法?

image = Clipboard.GetImage();

在提供的链接中有更多的信息,它还显示了如何检查剪贴板上是否存在图像(ContainsImage) -但是您可能需要采取一些其他步骤,这取决于何时对象被写入剪贴板。

我甚至不知道GetFormats方法,也找不到Windows窗体或WPF剪贴板类暴露的方法。

发现我的keylistener阻塞了windows-keylistener。这就是为什么windows没有将截图保存在剪贴板中:-(

)

处理:

// get the bounding area of the screen containing (0,0)
// remember in a multidisplay environment you don't know which display holds this point
Drawing.Rectangle bounds = Forms.Screen.GetBounds(System.Drawing.Point.Empty);
// create the bitmap to copy the screen shot to
Drawing.Bitmap bitmap = new Drawing.Bitmap(bounds.Width, bounds.Height);
// now copy the screen image to the graphics device from the bitmap
using (Drawing.Graphics gr = Drawing.Graphics.FromImage(bitmap))
{
    gr.CopyFromScreen(Drawing.Point.Empty, Drawing.Point.Empty, bounds.Size);
}