【问题标题】:Taking Photo of Screen with VB.NET使用 VB.NET 拍摄屏幕照片
【发布时间】:2011-07-06 19:24:43
【问题描述】:

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

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

提前致谢,

洛根

【问题讨论】:

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


【解决方案1】:

你应该使用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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我刚试过,但它不起作用。还有其他建议吗?我什至尝试过 +{PRTSC}...
    • @Logan - 除了使用系统调用。
    【解决方案3】:

    直接的解决办法是只发送打印屏幕:

    SendKeys.Send("{PRTSC}")
    

    但这充其量只是一个蹩脚的技巧。要可靠地截取屏幕截图,您需要使用 P/Invoke 将桌面句柄 (0) 的 GetDCBitBlt 其内容转换为 Bitmap。完成之前不要忘记ReleaseDC 桌面的 DC。

    或使用Graphics.CopyFromScreen

    【讨论】:

      【解决方案4】:

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

      类似:

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

      【讨论】:

      • 我刚试过了,还是不行。还有其他建议吗?我什至尝试过 +{PRTSC}...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多