Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

A Screen Capture Utility

0.00/5 (No votes)
19 Oct 2007 1  
A screen capture utility for developers as well as generic users.

Screenshot - JPG_capture.jpg

Introduction

JPG Capture is a utility designed for developers to capture debugging screenshots, while it is also ideal for general screen capture purposes. JPG Capture can capture the desktop screen into picture files in sequence. Users can define the capture hotkey, capture area (current window, full screen, or rectangular area), picture format (JPG, GIF, BMP etc.), and also the destination.

Setup the hotkey

The program uses a Win32 API function called RegisterHotKey to setup the system wide hotkey.

<DllImport("user32", EntryPoint:="RegisterHotKey", _
SetLastError:=True, _
ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Function RegisterHotkey(ByVal hwnd As IntPtr, _
    ByVal Id As Int32, _
    <MarshalAs(UnmanagedType.U4)> ByVal fsModifiers As Int32, _
    <MarshalAs(UnmanagedType.U4)> ByVal vkey As Int32) As Boolean
End Function

The program passes the window handle of an invisible window called inVisibleHotkey to the RegisterHotKey function. Whenever the hotkey is pressed, a Windows message will be sent to the inVisibleHotkey window, which will trigger the HotKey_Press() routine.

The user can define the hotkey combination using two parameters, fsModifiers and vkey. fsModifiers can be the Ctrl, Alt, or Shift key. vkey can be any other key.

Public Enum HotkeyModifierFlags
    MOD_ALT = &H1
    MOD_CONTROL = &H2
    MOD_SHIFT = &H4
    MOD_WIN = &H8
End Enum

Public Enum HotkeyVkeyFlags
    Key_O = &H4F
    Key_G = &H47
    Key_T = &H54
End Enum

Define the capture area

The capture area can be the current window, full screen, or a rectangular area.

  • The current window option uses a Win32 API function called GetForegroundWindow to define the capture area.
  • The full screen option uses a Win32 API function called GetDesktopWindow to define the capture area.
  • The rectangular area option uses a transparent window called inVisibleCapWin to define the capture area. When the capture starts, the inVisibleCapWin window will be loaded. Users can use a mouse to draw a rectangle to define the capture area. After the mouse button is released, the inVisibleCapWin window will be closed and continues the capture process.

Capture process

The program uses a Win32 API function called BitBlt to capture the desktop screen according to the selected capture area.

<DllImport("gdi32.dll")> Public Shared _
Function BitBlt(ByVal hObject As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, _
        ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hObjectSource As IntPtr, _
        ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As Integer) As Boolean
End Function

The screenshot file is saved in sequence. The program uses a routine called makeup_filename to generate the filename in sequence.

Function makeup_Filename(ByRef Scr_num As Integer, ByVal Dir_Path As String, _
            ByVal Prefix_fn As String, ByVal Subfix_fn As String) As String
'combine and generate the filename in sequence

    Dim FileName As String
    Dir_Path = Standardize_path(Dir_Path)
    If Not Directory.Exists(Dir_Path) Then
        Directory.CreateDirectory(Dir_Path)
        'make sure the directory do exist.

        Scr_num = 0
        'reset the picture number since the new dir is empty.
    End If

Next_num:

    If Scr_num < 0 Then Stop
    Scr_num = Scr_num + 1
    FileName = Dir_Path & Prefix_fn
    FileName = FileName & Format(Scr_num, "000")
    FileName = FileName & "." & Subfix_fn
        
    If File.Exists(FileName) Then GoTo Next_num
    'make sure NOT to overwrite the exsisting file

    Return FileName
End Function

Config file

The settings of the program is saved into a config file called config.ini. If the config file is missing, the default config file will be created.

    Dir_Path = C:\Lexer_trace\
    Prefix_fn = lexer
    Subfix_fn = jpg
    hotfsModifiers = 2
    hotVkey = 71
    Area = 2

Future improvements

There are some other functions that can be developed, like a popup preview window before saving the file, resizing the screenshot file as desired, etc.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here