ScreenCap.vb
上传用户:szledliu
上传日期:2021-01-29
资源大小:13805k
文件大小:5k
源码类别:

C#编程

开发平台:

C#

  1. Imports System
  2. Imports System.Runtime.InteropServices
  3. Imports System.Drawing
  4. Imports System.Drawing.Imaging
  5. '/ Provides functions to capture the entire screen, or a particular window, and save it to a file.
  6. Public Class ScreenCap
  7.     '/ Creates an Image object containing a screen shot of the entire desktop
  8.     Public Function CaptureScreen() As Image
  9.         Return CaptureWindow(User32.GetDesktopWindow())
  10.     End Function 'CaptureScreen
  11.     '/ Creates an Image object containing a screen shot of a specific window
  12.     Public Function CaptureWindow(ByVal handle As IntPtr) As Image
  13.         Dim SRCCOPY As Integer = &HCC0020
  14.         ' get te hDC of the target window
  15.         Dim hdcSrc As IntPtr = User32.GetWindowDC(handle)
  16.         ' get the size
  17.         Dim windowRect As New User32.RECT
  18.         User32.GetWindowRect(handle, windowRect)
  19.         Dim width As Integer = windowRect.right - windowRect.left
  20.         Dim height As Integer = windowRect.bottom - windowRect.top
  21.         ' create a device context we can copy to
  22.         Dim hdcDest As IntPtr = GDI32.CreateCompatibleDC(hdcSrc)
  23.         ' create a bitmap we can copy it to,
  24.         ' using GetDeviceCaps to get the width/height
  25.         Dim hBitmap As IntPtr = GDI32.CreateCompatibleBitmap(hdcSrc, width, height)
  26.         ' select the bitmap object
  27.         Dim hOld As IntPtr = GDI32.SelectObject(hdcDest, hBitmap)
  28.         ' bitblt over
  29.         GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, SRCCOPY)
  30.         ' restore selection
  31.         GDI32.SelectObject(hdcDest, hOld)
  32.         ' clean up 
  33.         GDI32.DeleteDC(hdcDest)
  34.         User32.ReleaseDC(handle, hdcSrc)
  35.         ' get a .NET image object for it
  36.         Dim img As Image = Image.FromHbitmap(hBitmap)
  37.         ' free up the Bitmap object
  38.         GDI32.DeleteObject(hBitmap)
  39.         Return img
  40.     End Function 'CaptureWindow
  41.     '/ Captures a screen shot of a specific window, and saves it to a file
  42.     Public Sub CaptureWindowToFile(ByVal handle As IntPtr, ByVal filename As String, ByVal format As ImageFormat)
  43.         Dim img As Image = CaptureWindow(handle)
  44.         img.Save(filename, format)
  45.     End Sub 'CaptureWindowToFile
  46.     '/ Captures a screen shot of the entire desktop, and saves it to a file
  47.     Public Sub CaptureScreenToFile(ByVal filename As String, ByVal format As ImageFormat)
  48.         Dim img As Image = CaptureScreen()
  49.         img.Save(filename, format)
  50.     End Sub 'CaptureScreenToFile
  51.     Public Function CaptureDeskTopRectangle(ByVal CapRect As Rectangle, ByVal CapRectWidth As Integer, ByVal CapRectHeight As Integer) As Bitmap
  52.         '/ Returns BitMap of the region of the desktop, similar to CaptureWindow, but can be used to 
  53.         '/ create a snapshot of the desktop when no handle is present, by passing in a rectangle 
  54.         '/ Grabs snapshot of entire desktop, then crops it using the passed in rectangle's coordinates
  55.         Dim SC As New ScreenCap
  56.         Dim bmpImage As New Bitmap(SC.CaptureScreen)
  57.         Dim bmpCrop As New Bitmap(CapRectWidth, CapRectHeight, bmpImage.PixelFormat)
  58.         Dim recCrop As New Rectangle(CapRect.X, CapRect.Y, CapRectWidth, CapRectHeight)
  59.         Dim gphCrop As Graphics = Graphics.FromImage(bmpCrop)
  60.         Dim recDest As New Rectangle(0, 0, CapRectWidth, CapRectHeight)
  61.         gphCrop.DrawImage(bmpImage, recDest, recCrop.X, recCrop.Y, recCrop.Width, _
  62.           recCrop.Height, GraphicsUnit.Pixel)
  63.         Return bmpCrop
  64.     End Function
  65.     '/ Helper class containing Gdi32 API functions
  66.     Private Class GDI32
  67.         Public SRCCOPY As Integer = &HCC0020
  68.         ' BitBlt dwRop parameter
  69.         Declare Function BitBlt Lib "gdi32.dll" ( _
  70.             ByVal hDestDC As IntPtr, _
  71.             ByVal x As Int32, _
  72.             ByVal y As Int32, _
  73.             ByVal nWidth As Int32, _
  74.             ByVal nHeight As Int32, _
  75.             ByVal hSrcDC As IntPtr, _
  76.             ByVal xSrc As Int32, _
  77.             ByVal ySrc As Int32, _
  78.             ByVal dwRop As Int32) As Int32
  79.         Declare Function CreateCompatibleBitmap Lib "gdi32.dll" ( _
  80.             ByVal hdc As IntPtr, _
  81.             ByVal nWidth As Int32, _
  82.             ByVal nHeight As Int32) As IntPtr
  83.         Declare Function CreateCompatibleDC Lib "gdi32.dll" ( _
  84.             ByVal hdc As IntPtr) As IntPtr
  85.         Declare Function DeleteDC Lib "gdi32.dll" ( _
  86.             ByVal hdc As IntPtr) As Int32
  87.         Declare Function DeleteObject Lib "gdi32.dll" ( _
  88.             ByVal hObject As IntPtr) As Int32
  89.         Declare Function SelectObject Lib "gdi32.dll" ( _
  90.             ByVal hdc As IntPtr, _
  91.             ByVal hObject As IntPtr) As IntPtr
  92.     End Class 'GDI32
  93.     '/ Helper class containing User32 API functions
  94.     Public Class User32
  95.         <StructLayout(LayoutKind.Sequential)> _
  96.         Public Structure RECT
  97.             Public left As Integer
  98.             Public top As Integer
  99.             Public right As Integer
  100.             Public bottom As Integer
  101.         End Structure 'RECT
  102.         Declare Function GetDesktopWindow Lib "user32.dll" () As IntPtr
  103.         Declare Function GetWindowDC Lib "user32.dll" ( _
  104.             ByVal hwnd As IntPtr) As IntPtr
  105.         Declare Function ReleaseDC Lib "user32.dll" ( _
  106.             ByVal hwnd As IntPtr, _
  107.             ByVal hdc As IntPtr) As Int32
  108.         Declare Function GetWindowRect Lib "user32.dll" ( _
  109.             ByVal hwnd As IntPtr, _
  110.             ByRef lpRect As RECT) As Int32
  111.     End Class 'User32
  112. End Class 'ScreenCapture