当前位置:编程学习 > VB >>

利用VB捕捉并保存屏幕图象

 

 

  大家知道在VB下利用API函数Bitblt可以将屏幕或者窗口上的图象拷贝到VB中的PictureBox对象中,但是如果简单的利用PictureBox的SavePicture函数来保存图象,会发现什么也保存不了。这篇文章就是介绍如何捕获并利用Windows下的OLE API函数保存图象。

  首先来看源程序,首先建立一个新的工程文件,然后在Form1中加入5个CommandButton对象和一个PictureBox对象,然后在Form1中加入以下代码:

Option Explicit

Option Base 0

 

Private Type PALETTEENTRY

  peRed As Byte

  peGreen As Byte

  peBlue As Byte

  peFlags As Byte

End Type

 

Private Type LOGPALETTE

  palVersion As Integer

  palNumEntries As Integer

  palPalEntry(255) As PALETTEENTRY

End Type

 

Private Type GUID

  Data1 As Long

  Data2 As Integer

  Data3 As Integer

  Data4(7) As Byte

End Type

 

Private Const RASTERCAPS As Long = 38

Private Const RC_PALETTE As Long = &H100

Private Const SIZEPALETTE As Long = 104

 

Private Type RECT

  Left As Long

  Top As Long

  Right As Long

  Bottom As Long

End Type

 

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 GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal _

    iCapabilitiy As Long) As Long

Private Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, _

    ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries _

    As PALETTEENTRY) As Long

Private Declare Function CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) _

    As Long

Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject _

    As Long) As Long

Private Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As _

    Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, _

    ByVal hDCSrc As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop _

    As Long) As Long

Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long

Private Declare Function GetForegroundWindow Lib "USER32" () As Long

Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette _

    As Long, ByVal bForceBackground As Long) As Long

Private Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As Long

Private Declare Function GetWindowDC Lib "USER32" (ByVal hWnd As Long) As Long

Private Declare Function GetDC Lib "USER32" (ByVal hWnd As Long) As Long

Private Declare Function GetWindowRect Lib "USER32" (ByVal hWnd As Long, lpRect As _

    RECT) As Long

Private Declare Function ReleaseDC Lib "USER32" (ByVal hWnd As Long, ByVal hDC As _

    Long) As Long

Private Declare Function GetDesktopWindow Lib "USER32" () As Long

 

Private Type PicBmp

  Size As Long

  Type As Long

  hBmp As Long

  hPal As Long

  Reserved As Long

End Type

 

Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As _

    PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long

 

捕捉整个屏幕

Private Sub Command1_Click()

  Set Picture1.Picture = CaptureScreen()

End Sub

&nb

补充:软件开发 , Vb ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,