2011-07-06 96 views
0

目前,我有以下VB.NET代碼,使我的桌面的截圖,但是隻需要激活屏幕的畫面:拍攝畫面的照片與VB.NET

Public Function SaveScreen(ByVal theFile As String) As Boolean 

     Try 
      SendKeys.Send("%{PRTSC}")   '<alt + printscreen> 
      Application.DoEvents() 

      Dim data As IDataObject = Clipboard.GetDataObject() 

      If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then 
       Dim bmp As Bitmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Bitmap) 
       bmp.Save(theFile, Imaging.ImageFormat.Png) 
      End If 
      Clipboard.SetDataObject(0)  'save memory by removing the image from the clipboard 
      Return True 
     Catch ex As Exception 
      Return False 
     End Try 

    End Function 

下面的代碼是我如何執行上述功能,如果這有什麼差別,我不認爲它的作用:

SaveScreen("C:\Lexer_trace\screen.png") 

現在,我需要能夠把整個屏幕的圖片,而不僅僅是聚焦窗口。我將如何做到這一點?

由於提前,

洛根

+0

[此鏈接](http://vbtab.blogspot.com/2013/11/how-to-take-a-screenshot-print-screen-using-vb- net.html)可能會解釋得很好.. – Jasir

回答

2

您的評論說,您要發送alt + printscreen這不只是捕捉當前活動窗口。

如果你只是發送printscreen它應該捕獲整個桌面。

+0

我剛剛嘗試過,並且不起作用。還有其他建議嗎?我甚至嘗試+ {PRTSC} ... – Logan

+0

@Logan - 沒有別的使用系統調用。 – ChrisF

4

您應該使用System.Drawing.Graphics.CopyFromScreen() See Here從屏幕

複製簡單查詢屏幕的全尺寸在通過爲點。 類似的東西對你有什麼用.CopyFromScreen()

Public Sub SaveScreen(filename As String) 

    Dim screenSize = SystemInformation.PrimaryMonitorSize 
    Dim bitmap = New Bitmap(screenSize.Width, screenSize.Height) 
    Dim g = Graphics.FromImage(bitmap) 

    g.CopyFromScreen(New Point(0, 0), New Point(0, 0), screenSize) 
    g.Flush() 
    bitmap.Save(filename, System.Drawing.Imaging.ImageFormat.Png) 

End Sub 
0

好眼前的解決將是隻發送打印屏幕:

SendKeys.Send("{PRTSC}") 

但是,這充其量是一個跛腳的黑客行爲。要可靠地截屏,您需要使用桌面句柄(0)的GetDC和其內容的BitBlt的P/Invoke到Bitmap。在完成之前,請不要忘記桌面上的直流電ReleaseDC

或者使用Graphics.CopyFromScreen

0

你試過不發送Alt鍵呢?

是這樣的:

SendKeys.Send("{PRTSC}")   '<printscreen> 
+0

我剛剛嘗試過,並且不起作用。還有其他建議嗎?我甚至嘗試過+ {PRTSC} ... – Logan