Skip to main content
Email Password   helpLost your password?

Introduction

This code snippet illustrates how to capture desktop or any window to a BMP file with minimum coding. It also demonstrates a neat way to save device context (DC) to a file on hard disk.

Code Explanation

To capture window, we can make use of built in functions available in Windows API. To get a list of functions available in this API, use API Viewer tool which can be added to Visual studio from Add-Ins Manager. Here is the list of some functions used from API:

How to Use API Functions in Visual Basic?

API functions are required to be declared before they are used. The best way is to declare all the required functions in a module file so that they are accessible to any form. Example of declaration:

Private Declare Function GetWindowDC Lib "user32" Alias "GetWindowDC" 
	(ByVal hwnd As Long) As Long

For declaration syntax of all other functions, please use “API Viewer” tool.

Code Algorithm Explanation in Brief

Public Function GetWindowScreenshot_
    (WndHandle As Long, SavePath As String, Optional BringFront As Integer = 1) As Long
'
' Function to create screeenshot of specified window and store at specified path
'
    On Error GoTo ErrorHandler

    Dim hDCSrc As Long
    Dim hDCMemory As Long
    Dim hBmp As Long
    Dim hBmpPrev As Long
    Dim WidthSrc As Long
    Dim HeightSrc As Long
    Dim Pic As PicBmp
    Dim IPic As IPicture
    Dim IID_IDispatch As guid
    Dim rc As RECT
    Dim pictr As PictureBox    
    
    'Bring window on top of all windows if specified
    If BringFront = 1 Then BringWindowToTop WndHandle
    
    'Get Window Size
    GetWindowRect WndHandle, rc
    WidthSrc = rc.Right - rc.Left
    HeightSrc = rc.Bottom - rc.Top
    
    'Get Window  device context
    hDCSrc = GetWindowDC(WndHandle)
    
    'create a memory device context
    hDCMemory = CreateCompatibleDC(hDCSrc)
    
    'create a bitmap compatible with window hdc
    hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)
    
    'copy newly created bitmap into memory device context
    hBmpPrev = SelectObject(hDCMemory, hBmp)    
    
    'copy window window hdc to memory hdc
    Call BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, _
                hDCSrc, 0, 0, vbSrcCopy)
      
    'Get Bmp from memory Dc
    hBmp = SelectObject(hDCMemory, hBmpPrev)
    
    'release the created objects and free memory
    Call DeleteDC(hDCMemory)
    Call ReleaseDC(WndHandle, hDCSrc)
    
    'fill in OLE IDispatch Interface ID
    With IID_IDispatch
       .data1 = &H20400
       .data4(0) = &HC0
       .data4(7) = &H46
     End With
    
    'fill Pic with necessary parts
    With Pic
       .Size = Len(Pic)         'Length of structure
       .Type = vbPicTypeBitmap  'Type of Picture (bitmap)
       .hBmp = hBmp             'Handle to bitmap
       .hPal = 0&               'Handle to palette (may be null)
     End With
    
    'create OLE Picture object
    Call OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
    
    'return the new Picture object
    SavePicture IPic, SavePath
    GetWindowScreenshot = 1
    Exit Function
    
ErrorHandler:
    GetWindowScreenshot = 0
End Function

More Graphics Related Code

Many more easy to use and free code snippets in VB 6 are available here.

Download Source Code with Demo Application

The demo application with full source code can be downloaded from here.

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
Generalscreen Pin
Jufine
23:27 11 Nov '09  
GeneralGood Pin
Md. Marufuzzaman
20:08 11 Oct '09  
GeneralMy vote of 2 Pin
Dave Kreskowiak
7:50 11 Oct '09  
GeneralScreenshot of the entire screen Pin
jan wilmans
2:49 24 Jul '08  
GeneralRe: Screenshot of the entire screen Pin
Rajesh Naik Ponda Goa
1:56 11 Oct '09  


Last Updated 11 Oct 2009 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009