用VB.NET拍摄屏幕照片

时间:2011-07-06 19:24:43

标签: .net vb.net vb.net-2010

目前我有以下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")

现在,我需要能够拍摄整个屏幕的照片,而不仅仅是聚焦窗口。我该怎么做?

提前致谢,

洛根

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您的评论说您正在发送只捕获当前活动窗口的alt + printscreen

如果您只是发送printscreen,它应该捕获整个桌面。

答案 2 :(得分:0)

立即修复就是只发送打印屏幕:

SendKeys.Send("{PRTSC}")

但这至少是一个蹩脚的黑客攻击。要可靠地截取屏幕截图,您需要使用P / Invoke到GetDC桌面句柄(0)并将其BitBlt内容放入Bitmap。在完成之前不要忘记ReleaseDC桌面的DC。

或使用Graphics.CopyFromScreen

答案 3 :(得分:0)

您是否尝试过不发送Alt键?

类似的东西:

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