加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用纯net技术实现抓屏(包含连续抓图和鼠标的问题的解决方法)

发布时间:2020-12-16 22:43:41 所属栏目:大数据 来源:网络整理
导读:之前转载了一篇关于api抓屏的实例,本次载的是老外Jason Hensley写的抓屏,实现方式与上次不同,可以方便大家对比 ''开发平台 VB.NET 2005 Beta 2 ''Description: A basic example of using the new built-in Sub in the '2.0 version of the dotNetFramewor

之前转载了一篇关于api抓屏的实例,本次载的是老外Jason Hensley写的抓屏,实现方式与上次不同,可以方便大家对比

''开发平台 VB.NET 2005 <Beta 2>

''Description: A basic example of using the new built-in Sub in the
'2.0 version of the dotNetFramework to capture the screen,or portion
'of the screen and putting the image in a picturebox. Then you have
'the option of saving the picturebox image to a JPEG file. This example
'just uses the basic SourceCopy raster on the screenshot. There
'are many raster-operations you can choose from.

''Update: Reworked the code to be compatible for VB.NET <Beta 2>. I
'also added a feature to hide the program when the screenshot is being
'taken.
'代码如下:
Public Class frmMain

Private Sub btnCopy_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnCopy.Click

'Create the bitmap and graphics objects.
Dim b As Bitmap = New Bitmap(Screen.PrimaryScreen.WorkingArea.Width,Screen.PrimaryScreen.WorkingArea.Height)
Dim g As Graphics = Graphics.FromImage(b)

Dim s As Size = New Size(Screen.PrimaryScreen.WorkingArea.Width,Screen.PrimaryScreen.WorkingArea.Height)

'See whether or not to hide the program before taking the
'screenshot.
If chkHide.Checked Then

Me.Hide()
'
'This is a short,sweet,and simple timeout code to pause
'for a specified amount of seconds. On my computer,1 sec
'is more than enough time for my app to be out of the way
'to take the screenshot to keep it from capturing the app
'with it.
Dim t As DateTime = Now.AddSeconds(1)
'
Do : Application.DoEvents()
Loop Until Now.Second >= t.Second
'
'Copy the image from the screen. You can customize the size
'and postions to take the screenshot from.
g.CopyFromScreen(0,s,CopyPixelOperation.SourceCopy)
'
'Show the app again after the screenshot has been taken.
Me.Show()

'Clear this variable from memory.
t = Nothing

Else

'Copy the image from the screen. You can customize the size
'and postions to take the screenshot from.
g.CopyFromScreen(0,CopyPixelOperation.SourceCopy)

End If

'Load the copied image to the picturebox control.
pic.Image = b

'Clean up alittle.
g.Dispose()
b = Nothing

End Sub

Private Sub btnSave_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnSave.Click

Dim saveDlg As SaveFileDialog = New SaveFileDialog
Dim dlgResult As DialogResult = New DialogResult

'Set the filter to JPEG files only.
saveDlg.Filter = "JPEG Files (*.jpg)|*.jpg"
saveDlg.Title = "Select the file to save the image too."

dlgResult = saveDlg.ShowDialog

If dlgResult = Windows.Forms.DialogResult.OK Then

'Save the image contained in the picturebox.
pic.Image.Save(saveDlg.FileName)

End If

End Sub

End Class


我的补充:

1)如果想连续抓屏,就必须将下面的定义部分改为全局变量,以防止反复定义新对象而导致系统崩溃

Dim b As Bitmap= New Bitmap(Screen.PrimaryScreen.WorkingArea.Width,Screen.PrimaryScreen.WorkingArea.Height)
Dim g As Graphics = Graphics.FromImage(b)

Dim s As Size = New Size(Screen.PrimaryScreen.WorkingArea.Width,Screen.PrimaryScreen.WorkingArea.Height)

2)抓鼠标的问题,必须获取鼠标位置,然后绘制鼠标到图像

g.CopyFromScreen(SecScreen_x,SecScreen_y,d_x,d_y,Copy_size,CopyPixelOperation.SourceCopy) '添加鼠标位置 Cursor.Current.Draw(g,New Rectangle(Cursor.Position,Cursor.Current.Size))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读