| 
 | 
 
- Option Explicit
 
  
- '//////////////////////////////////////////////////////////////////////////////
 
 - '@@summary 支持全屏截屏
 
 - '@@require 无
 
 - '@@reference 代码部分来源网络,我进行了组合构建,以及删减调试
 
 - '@@license MIT
 
 - '@@author [email protected]
 
 - '@@create 2016年4月28日14:10:43
 
 - '@@modify
 
 - '//////////////////////////////////////////////////////////////////////////////
 
  
- '//////////////////////////////////////////////////////////////////////////////
 
 - '//
 
 - '// 私有声明
 
 - '//
 
 - '//////////////////////////////////////////////////////////////////////////////
 
  
- '------------------------------------------------------------------------------
 
 - ' 私有数据类型
 
 - '------------------------------------------------------------------------------
 
 - Private Type GUID
 
 -     Data1 As Long
 
 -     Data2 As Integer
 
 -     Data3 As Integer
 
 -     Data4(0 To 7) As Byte
 
 - End Type
 
  
- Private Type GdiplusStartupInput
 
 -     GdiplusVersion As Long
 
 -     DebugEventCallback As Long
 
 -     SuppressBackgroundThread As Long
 
 -     SuppressExternalCodecs As Long
 
 - End Type
 
  
- Private Type EncoderParameter
 
 -     GUID As GUID
 
 -     NumberOfValues As Long
 
 -     Type As Long
 
 -     Value As Long
 
 - End Type
 
  
- Private Type EncoderParameters
 
 -     Count As Long
 
 -     Parameter As EncoderParameter
 
 - End Type
 
  
- Private Type PicBmp
 
 -     Size As Long
 
 -     Type As Long
 
 -     hbmp As Long
 
 -     hPal As Long
 
 -     Reserved As Long
 
 - End Type
 
  
- '------------------------------------------------------------------------------
 
 - ' 私有API
 
 - '------------------------------------------------------------------------------
 
 - Private Declare Function GdiplusStartup Lib "GDIPlus" (token As Long, inputbuf As GdiplusStartupInput, ByVal outputbuf As Long) As Long
 
 - Private Declare Function GdiplusShutdown Lib "GDIPlus" (ByVal token As Long) As Long
 
 - Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" (ByVal hbm As Long, ByVal hPal As Long, Bitmap As Long) As Long
 
 - Private Declare Function GdipDisposeImage Lib "GDIPlus" (ByVal Image As Long) As Long
 
 - Private Declare Function GdipSaveImageToFile Lib "GDIPlus" (ByVal Image As Long, ByVal filename As Long, clsidEncoder As GUID, encoderParams As Any) As Long
 
 - Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long
 
 - Private Declare Function GdipCreateBitmapFromFile Lib "GDIPlus" (ByVal filename As Long, Bitmap As Long) As Long
 
 - Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
 
 - Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
 
 - Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
 
 - Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
 
 - Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, _
 
 -                                                             ByVal nWidth As Long, ByVal nHeight As Long) As Long
 
 - Private Declare Function SelectObject Lib "gdi32" _
 
 -                             (ByVal hdc As Long, ByVal hObject As Long) As Long
 
 - Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _
 
 -                             (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, _
 
 -                              IPic As IPicture) As Long
 
 - Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
 
  
- '//////////////////////////////////////////////////////////////////////////////
 
 - '//
 
 - '// 类
 
 - '//
 
 - '//////////////////////////////////////////////////////////////////////////////
 
  
- '------------------------------------------------------------------------------
 
 - ' 初始化
 
 - '------------------------------------------------------------------------------
 
 - Private Sub Class_Initialize()
 
 - End Sub
 
  
- '------------------------------------------------------------------------------
 
 - ' 销毁
 
 - '------------------------------------------------------------------------------
 
 - Private Sub Class_Terminate()
 
 - End Sub
 
  
- '//////////////////////////////////////////////////////////////////////////////
 
 - '//
 
 - '// 私有方法
 
 - '//
 
 - '//////////////////////////////////////////////////////////////////////////////
 
  
- Private Function PictureBoxSaveJPG(ByVal pict As StdPicture, ByVal filename As String, Optional ByVal quality As Byte = 80) As Boolean
 
 -     Dim tSI As GdiplusStartupInput
 
 -     Dim lRes As Long
 
 -     Dim lGDIP As Long
 
 -     Dim lBitmap As Long
 
  
-     '初始化 GDI+
 
 -     tSI.GdiplusVersion = 1
 
 -     lRes = GdiplusStartup(lGDIP, tSI, 0)
 
 -     If lRes = 0 Then
 
 -         '从句柄创建 GDI+ 图像
 
 -         lRes = GdipCreateBitmapFromHBITMAP(pict.Handle, 0, lBitmap)
 
 -         If lRes = 0 Then
 
 -             Dim tJpgEncoder As GUID
 
 -             Dim tParams As EncoderParameters
 
  
-             '初始化解码器的GUID标识
 
 -             CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
 
 -             '设置解码器参数
 
 -             tParams.Count = 1
 
 -             With tParams.Parameter ' Quality
 
 -                 '得到Quality参数的GUID标识
 
 -                 CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .GUID
 
 -                 .NumberOfValues = 1
 
 -                 .Type = 4
 
 -                 .Value = VarPtr(quality)
 
 -             End With
 
 -             '保存图像
 
 -             lRes = GdipSaveImageToFile(lBitmap, StrPtr(filename), tJpgEncoder, tParams)
 
 -             '销毁GDI+图像
 
 -             GdipDisposeImage lBitmap
 
 -         End If
 
 -         '销毁 GDI+
 
 -         GdiplusShutdown lGDIP
 
 -     End If
 
 -     If lRes Then
 
 -         PictureBoxSaveJPG = False
 
 -     Else
 
 -         PictureBoxSaveJPG = True
 
 -     End If
 
 - End Function
 
  
- '//////////////////////////////////////////////////////////////////////////////
 
 - '//
 
 - '// 公有方法
 
 - '//
 
 - '//////////////////////////////////////////////////////////////////////////////
 
  
- Public Sub ClipScreenToFile(ByVal FilePath As String)
 
 -     Dim pPicture As New StdPicture
 
 -     Set pPicture = ClipToImage
 
 -     PictureBoxSaveJPG pPicture, FilePath
 
 - End Sub
 
  
- Private Function ClipToImage() As StdPicture
 
 -     Dim screenDc As Long, width As Long, height As Long
 
 -     Dim lPicDc As Long, lPicBmp As Long
 
 -     Dim G As GUID, p As PicBmp
 
  
-     width = Screen.width / Screen.TwipsPerPixelX
 
 -     height = Screen.height / Screen.TwipsPerPixelY
 
 -     screenDc = GetDC(0)
 
 -     lPicDc = CreateCompatibleDC(screenDc)
 
 -     lPicBmp = CreateCompatibleBitmap(screenDc, width, height)
 
 -     SelectObject lPicDc, lPicBmp
 
 -     BitBlt lPicDc, 0, 0, width, height, screenDc, 0, 0, vbSrcCopy
 
 -     With G
 
 -         .Data1 = &H20400
 
 -         .Data4(0) = &HC0&
 
 -         .Data4(7) = &H46&
 
 -     End With
 
 -     With p
 
 -         .Size = Len(p)
 
 -         .Type = vbPicTypeBitmap
 
 -         .hbmp = lPicBmp
 
 -         .hPal = &H0&
 
 -     End With
 
 -     OleCreatePictureIndirect p, G, True, ClipToImage
 
 -     ReleaseDC 0, screenDc
 
 -     DeleteObject lPicBmp
 
 - End Function
 
  复制代码 使用方式 
1、复制以上代码 
2、VB6中创建一个类,删除默认的代码 
3、以刚才复制的代码粘贴到新建的类中,将类命名为CScreenCliper 
4、代码用法 
- Dim op As New CScreenCliper
 
 - op.ClipScreenToFile App.Path & "\demo.jpg"
 
 - Set op = Nothing
 
  复制代码 
 
 |   
 
 
 
 |