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

时间:2011-08-26 22:26:56

标签: c# .net .net-4.0

我尝试从剪贴板中截取屏幕截图。我编写了以下由PRINT-Key触发的代码:

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

但“格式”是空的。 www中的所有教程都告诉我这样做,但我无法解释上述行为。

(我在Windows 7 x64上使用C#和.NET 4.0)

3 个答案:

答案 0 :(得分:2)

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

Here's the MSDN sample

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

答案 1 :(得分:1)

您是否尝试过调用GetImage方法?

image = Clipboard.GetImage();

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

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

答案 2 :(得分:0)

发现我的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);
}