level 1
sunking1998
楼主
Dim capture1 As IntPtr = CreateDC("DISPLAY", Nothing, Nothing, Nothing)
在练习写屏幕截屏的时候,上面这段代码返回值为0,不知道哪里出错了。
以下是全部代码:
Imports System.Runtime.InteropServices.DllImportAttribute
Imports System.Drawing.Imaging
Public Class Form1
Private Shared Function BitBlt(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 nYSrc As Integer, ByVal dwRop As Integer) As Boolean
End Function
Private Shared Function CreateDC(ByVal lpszDriver As String, ByVal lpszDevice As String, ByVal lpszOutput As String, ByVal lpInitData As IntPtr) As IntPtr
End Function
Private picture As Bitmap = Nothing
Public Sub capture_window()
Me.Visible = False
Dim capture1 As IntPtr = CreateDC("DISPLAY", Nothing, Nothing, Nothing)
Dim get1 As Graphics = Graphics.FromHdc(capture1)
picture = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, get1)
Dim get2 As Graphics = Graphics.FromImage(picture)
Dim get3 As IntPtr = get1.GetHdc() '获取屏幕的句柄
Dim get4 As IntPtr = get2.GetHdc() '获取位图的句柄
BitBlt(get4, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, get3, 0, 0, 13369376) '把当前屏幕复制到位图中
get1.ReleaseHdc(get3) '释放屏幕句柄
get2.ReleaseHdc(get4) '释放位图句柄
picture.Save("CapturePicture.jpg", ImageFormat.Jpeg)
MessageBox.Show(" 已经把当前截取屏幕保存到CapturePicture.jpg,检查程序根目录")
Me.Visible = True
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub 抓捕当前屏幕ToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles 抓捕当前屏幕ToolStripMenuItem.Click
capture_window()
End Sub
Private Sub 退出程序ToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles 退出程序ToolStripMenuItem.Click
NotifyIcon1.Visible = False
'关闭系统
Me.Close()
End Sub
End Class
2017年04月20日 02点04分
1
在练习写屏幕截屏的时候,上面这段代码返回值为0,不知道哪里出错了。
以下是全部代码:
Imports System.Runtime.InteropServices.DllImportAttribute
Imports System.Drawing.Imaging
Public Class Form1
Private Shared Function BitBlt(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 nYSrc As Integer, ByVal dwRop As Integer) As Boolean
End Function
Private Shared Function CreateDC(ByVal lpszDriver As String, ByVal lpszDevice As String, ByVal lpszOutput As String, ByVal lpInitData As IntPtr) As IntPtr
End Function
Private picture As Bitmap = Nothing
Public Sub capture_window()
Me.Visible = False
Dim capture1 As IntPtr = CreateDC("DISPLAY", Nothing, Nothing, Nothing)
Dim get1 As Graphics = Graphics.FromHdc(capture1)
picture = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, get1)
Dim get2 As Graphics = Graphics.FromImage(picture)
Dim get3 As IntPtr = get1.GetHdc() '获取屏幕的句柄
Dim get4 As IntPtr = get2.GetHdc() '获取位图的句柄
BitBlt(get4, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, get3, 0, 0, 13369376) '把当前屏幕复制到位图中
get1.ReleaseHdc(get3) '释放屏幕句柄
get2.ReleaseHdc(get4) '释放位图句柄
picture.Save("CapturePicture.jpg", ImageFormat.Jpeg)
MessageBox.Show(" 已经把当前截取屏幕保存到CapturePicture.jpg,检查程序根目录")
Me.Visible = True
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub 抓捕当前屏幕ToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles 抓捕当前屏幕ToolStripMenuItem.Click
capture_window()
End Sub
Private Sub 退出程序ToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles 退出程序ToolStripMenuItem.Click
NotifyIcon1.Visible = False
'关闭系统
Me.Close()
End Sub
End Class