目前我有以下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 :(得分: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。
答案 3 :(得分:0)
您是否尝试过不发送Alt键?
类似的东西:
SendKeys.Send("{PRTSC}") '<printscreen>