2011-08-26 88 views
0

我嘗試從剪貼板中獲取屏幕截圖。我寫了以下PRINT-Key觸發的代碼:如何從剪貼板獲取截圖?

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

但「格式」爲空。 www中的所有教程都告訴我這樣做,但我不能解釋上述行爲。

(我使用C#.NET藤條4.0在Windows 7 64位系統)

+0

聽起來像你對我需要另一個PRINT鍵,你從來沒有說過「但其他程序可以看到它。」 –

+0

以及我想在我的帖子中解釋,截圖是因爲我可以通過它來繪製,但我希望它很明顯;-) – jwillmer

回答

0

發現我的keylistener阻止了windows-keylistener。這也是爲什麼窗口haven't在剪貼板中保存的截圖:-(

解決方法:

// 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); 
} 
2

您是否嘗試過的方法Clipboard.GetImage();

Here's the MSDN sample

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

我試過了,沒有圖像.. – jwillmer

+0

你使用WinForms?我嘗試了一個項目中的代碼,它工作正常。 – Lander

+0

使用wpf,也許多數民衆贊成但它仍然是爲什麼? – jwillmer

1

你有沒有打過電話的GetImage方法?

image = Clipboard.GetImage(); 

有在鏈路提供了更多的信息,這也說明了如何檢查剪貼板上(ContainsImage)存在的圖像 - 但對象時,你可能需要採取一些其他步驟,取決於被寫入剪貼板。

我甚至沒有意識到GetFormats方法,並找不到由Windows窗體或WPF剪貼板類公開的方法。

+0

格式顯示剪貼板中的哪些格式,例如:PlainText,RTF,TIFF,PNG,.. – jwillmer