'取得设备上下文句柄
Declare Auto Function GetDC()Function GetDC Lib "user32" (ByVal hwnd As Integer) As IntPtr
'取得指定设备的钩子,也就是句柄
Declare Auto Function CreateDC()Function CreateDC Lib "GDI32" (ByVal lpszDriver As String, _
ByVal lpszDevice As String, _
ByVal lpszOutput As String, _
ByVal lpInitData As Integer) As IntPtr
'复制设备句柄中的资源到一个位图中
Declare Auto Function BitBlt()Function BitBlt Lib "gdi32" (ByVal hdcDest As IntPtr, _
ByVal nXDest As Integer, _
ByVal nyDest As Integer, _
ByVal nWidth As Integer, _
ByVal nHeight As Integer, _
ByVal hdcSrc As IntPtr, _
ByVal nXSrc As Integer, _
ByVal nYScr As Integer, _
ByVal dwRop As System.Int32) As Boolean

Private Sub Button1_Click_1()Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Visible = False '首先隐藏自己
Dim dc1 As IntPtr = CreateDC("DISPLAY", "", "", 0) '取得显示器全屏幕句柄
'也可以这样来取得屏幕句柄
' Dim dc1 As IntPtr = GetDC(0)
'创建显示器的DC
Dim g1 As Graphics = Graphics.FromHdc(dc1)
'由一个指定设备的句柄创建一个新的Graphics对象
Dim myImage As Bitmap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1)
'根据屏幕大小创建一个与之相同大小的Bitmap对象
Dim g2 As Graphics = Graphics.FromImage(myImage)
'获得屏幕的句柄
Dim dc3 As IntPtr = g1.GetHdc()
'获得位图的句柄
Dim dc2 As IntPtr = g2.GetHdc()
'把当前屏幕捕获到位图对象中
BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376)
'把当前屏幕拷贝到位图中
g1.ReleaseHdc(dc3)
g2.ReleaseHdc(dc2)
'释放位图句柄
Me.PictureBox1.Image = myImage
'下面的语句可以用于保存抓取的图像到一个文件中
' If (SaveFileDialog1.ShowDialog() = DialogResult.OK) Then
' myImage.Save(SaveFileDialog1.FileName)
' MessageBox.Show("已经把当前屏幕保存!")
Me.Visible = True '抓图完成后显示自己窗口
' End If
End Sub
1934

被折叠的 条评论
为什么被折叠?



