LEADTOOLS Screen Capture (Leadtools.ScreenCapture assembly)
LEAD Technologies, Inc

ScreenCaptureEngine Class

Example 





Members 
The main class for the Screen Capture Engine.
Object Model
ScreenCaptureEngine ClassScreenCaptureOptions StructureScreenCaptureAreaOptions StructureScreenCaptureObjectOptions Structure
Syntax
public class ScreenCaptureEngine : System.IDisposable  
'Declaration
 
Public Class ScreenCaptureEngine 
   Implements System.IDisposable 
'Usage
 
Dim instance As ScreenCaptureEngine
function Leadtools.ScreenCapture.ScreenCaptureEngine()
public ref class ScreenCaptureEngine : public System.IDisposable  
Example
 
WithEvents scEngine As ScreenCaptureEngine
Public Sub ScreenCaptureEngineExample()
   ' Startup the ScreenCapture
   ScreenCaptureEngine.Startup()

   ' Define a ScreenCaptureEngine class object
   scEngine = New ScreenCaptureEngine()

   ' Define the Help Callback that will run whenever the Help button is pressed on the dialogs
   Dim helpCallbackObj As New ScreenCaptureHelpCallback(AddressOf HelpCallback)

   ' Define ScreenCaptureAreaOptions and fill it using dialog
   Dim scAreaOptions As ScreenCaptureAreaOptions
   scAreaOptions = ScreenCaptureAreaOptions.Empty

   ' Get the default options
   scAreaOptions = ScreenCaptureEngine.DefaultCaptureAreaOptions

   ' Open the dialog allowing the user to change the values
   ' NOTE: To fill the structure manually, you can write:
   ' Cursor drawCursor = Cursors.Cross;
   ' scAreaOptions.AreaType = ScreenCaptureAreaType.Rectangle;
   ' scAreaOptions.DrawCursor = drawCursor;
   ' scAreaOptions.DrawLineColor = Color.Red;
   ' scAreaOptions.DrawLineStyle = ScreenCaptureAreaLineStyle.Solid;
   ' scAreaOptions.EllipseHeight = 0;
   ' scAreaOptions.EllipseWidth = 0;
   ' scAreaOptions.FillBackgroundColor = Color.Black;
   ' scAreaOptions.FillForegroundColor = Color.White;
   ' scAreaOptions.FillPattern = ScreenCaptureAreaFillPattern.Solid;
   ' scAreaOptions.Flags = ScreenCaptureAreaFlags.ShowInfoWindow;
   ' scAreaOptions.InfoWindowBounds = new Rectangle(ScreenCaptureAreaOptions.LeftInfoWindowPosition, ScreenCaptureAreaOptions.TopInfoWindowPosition,_ 
   ' ScreenCaptureAreaOptions.MediumInfoWindowSize, ScreenCaptureAreaOptions.MediumInfoWindowSize);
   ' scAreaOptions.TextBackgroundColor = Color.White;
   ' scAreaOptions.TextForegroundColor = Color.Black;
   ' scAreaOptions.Zoom = ScreenCaptureAreaZoom.Normal;
   scEngine.ShowCaptureAreaOptionsDialog(Nothing, ScreenCaptureDialogFlags.CaptureAreaOptionsContextHelp, scAreaOptions, True, helpCallbackObj)

   ' Define ScreenCaptureOptions and fill it using dialog
   Dim scOptions As ScreenCaptureOptions
   scOptions = ScreenCaptureOptions.Empty

   ' Set the ScreenCaptureHotKeyCallback, so that it gets called if the hotkey is set in the dialog
   Dim hotkeyCallbackObj As New ScreenCaptureHotkeyCallback(AddressOf HotKeyCallback)
   ScreenCaptureEngine.SetCaptureHotkeyCallback(hotkeyCallbackObj)

   ' Open the dialog allowing the user to change the values
   ' NOTE: To fill the structure manually, you can write:
   ' scOptions.CancelKey = Keys.Escape;
   ' scOptions.Count = 1;
   ' scOptions.Cursor = Cursors.Arrow;
   ' scOptions.Delay = 0;
   ' scOptions.Hotkey = Keys.F11;
   ' scOptions.Interval = 0;
   ' scOptions.OptimizedHotkey = true;
   ' scOptions.StatusCursor = Cursors.WaitCursor;
   scEngine.ShowCaptureOptionsDialog(Nothing, ScreenCaptureDialogFlags.SetCaptureOptionsContextHelp, scOptions, helpCallbackObj)

   ' Set the Engine's ScreenCaptureOptions
   scEngine.CaptureOptions = scOptions

   ' Define ScreenCaptureObjectOptions and fill it using dialog
   Dim scObjectOptions As ScreenCaptureObjectOptions
   scObjectOptions = ScreenCaptureObjectOptions.Empty

   ' Get the default Options
   scObjectOptions = ScreenCaptureEngine.DefaultCaptureObjectOptions

   ' Open the dialog allowing the user to change the values
   ' NOTE: To fill the structure manually, you can write:
   ' scObjectOptions.BorderWidth = 2;
   ' scObjectOptions.EnableKeyboard = true;
   ' scObjectOptions.Invert = false;
   ' scObjectOptions.SelectCursor = Cursors.Arrow;
   scEngine.ShowCaptureObjectOptionsDialog(Nothing, ScreenCaptureDialogFlags.CaptureObjectOptionsContextHelp, scObjectOptions, True, helpCallbackObj)

   ' Define ScreenCaptureInformation class object
   Dim scInformation As ScreenCaptureInformation = Nothing

   ' NOTE: After preparing the structures and classes,
   ' in this place you can insert any Capture method, such as:
   ' CaptureWindow, CaptureActiveWindow, CaptureActiveClient, CaptureWallpaper,
   ' CaptureFullScreen, CaptureMenuUnderCursor, CaptureWindowUnderCursor,
   ' CaptureSelectedObject, CaptureArea, CaptureMouseCursor

   ' We will Capture an Area of the screen
   Dim image As RasterImage
   image = scEngine.CaptureArea(scAreaOptions, scInformation)

   ' To get the number of resources in a EXE file
   Dim iconsCount As Integer

   iconsCount = scEngine.GetResourcesCount(Path.Combine(LEAD_VARS.ImagesDir, "ExeWithResources.exe"), ScreenCaptureResourceType.Icon)

     ' Finally, if the Capture is still active, then Stop it
     If (scEngine.IsCaptureActive) Then
         scEngine.StopCapture()
     End If

     ' clean up
     image.Dispose()

     ' Shutdown the ScreenCapture
     ScreenCaptureEngine.Shutdown()
 End Sub

 Public Function HotKeyCallback(ByVal key As Keys) As Boolean
     ' Here you can do anything with the pressed key
     ' we will just show a message box
     MessageBox.Show("You pressed the " + key.ToString() + "character.")

     Return True
 End Function

 Public Sub HelpCallback(ByVal helpType As ScreenCaptureHelpType, ByVal controlId As ScreenCaptureControlId)
     ' Show a MessageBox mentioning the name of the dialog that called the help,
     ' and which control ID was requested.
     Select Case (helpType)
         Case ScreenCaptureHelpType.CaptureAreaOptions
             MessageBox.Show("Capture Area Options Dialog Help Button" & Environment.NewLine & "Control Id: " & controlId.ToString() & ".")
         Case ScreenCaptureHelpType.CaptureFromExe
             MessageBox.Show("Capture From EXE Dialog Help Button" & Environment.NewLine & "Control Id: " & controlId.ToString() & ".")
         Case ScreenCaptureHelpType.CaptureObjectOptions
             MessageBox.Show("Capture Object Options Dialog Help Button" & Environment.NewLine & "Control Id: " & controlId.ToString() & ".")
         Case ScreenCaptureHelpType.SetCaptureOptions
             MessageBox.Show("Capture Options Dialog Help Button" & Environment.NewLine & "Control Id: " & controlId.ToString() & ".")
         Case Else
             ' will never reach here
     End Select
 End Sub

 Public Sub scEngine_CaptureInformation(ByVal sender As Object, ByVal e As ScreenCaptureInformationEventArgs) Handles scEngine.CaptureInformation

     ' Define codecs class object to save the image
     Dim codecs As New RasterCodecs()
     codecs.ThrowExceptionsOnInvalidImages = True

     ' Save the resulted Image
   codecs.Save(e.Image, Path.Combine(LEAD_VARS.ImagesDir, "CapturedImage.bmp"), RasterImageFormat.Bmp, 24)


     ' NOTE: e.Information is a ScreenCaptureInformation structure filled with information
     ' about the captured image, this information can be used here
     ' Display a MessageBox with the bounds of the capture area
   MessageBox.Show("Captured Area Bounds:" & Environment.NewLine & "Top:" & e.Information.Area.Top.ToString() & Environment.NewLine & _
                   "Left:" & e.Information.Area.Left.ToString() & Environment.NewLine & "Right:" + e.Information.Area.Right.ToString() & _
                   Environment.NewLine & "Bottom:" & e.Information.Area.Bottom.ToString())

     ' everything worked fine
     e.Cancel = False
 End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
public void ScreenCaptureEngineExample()
   {
      // Startup the ScreenCapture
      ScreenCaptureEngine.Startup();

      // Define a ScreenCaptureEngine class object
      ScreenCaptureEngine scEngine = new ScreenCaptureEngine();

      // Define an EventHandler for CaptureInformation
      scEngine.CaptureInformation += new EventHandler<ScreenCaptureInformationEventArgs>(scEngine_CaptureInformation);

      // Define the Help Callback that will run whenever the Help button is pressed on the dialogs
      ScreenCaptureHelpCallback helpCallback = new ScreenCaptureHelpCallback(HelpCallback);

      // Define ScreenCaptureAreaOptions and fill it using dialog
      ScreenCaptureAreaOptions scAreaOptions = ScreenCaptureAreaOptions.Empty;
      // Get the default options
      scAreaOptions = ScreenCaptureEngine.DefaultCaptureAreaOptions;
      // Open the dialog allowing the user to change the values
      // NOTE: To fill the structure manually, you can write:
      // Cursor drawCursor = Cursors.Cross;
      // scAreaOptions.AreaType = ScreenCaptureAreaType.Rectangle;
      // scAreaOptions.DrawCursor = drawCursor;
      // scAreaOptions.DrawLineColor = Color.Red;
      // scAreaOptions.DrawLineStyle = ScreenCaptureAreaLineStyle.Solid;
      // scAreaOptions.EllipseHeight = 0;
      // scAreaOptions.EllipseWidth = 0;
      // scAreaOptions.FillBackgroundColor = Color.Black;
      // scAreaOptions.FillForegroundColor = Color.White;
      // scAreaOptions.FillPattern = ScreenCaptureAreaFillPattern.Solid;
      // scAreaOptions.Flags = ScreenCaptureAreaFlags.ShowInfoWindow;
      // scAreaOptions.InfoWindowBounds = new Rectangle(ScreenCaptureAreaOptions.LeftInfoWindowPosition, ScreenCaptureAreaOptions.TopInfoWindowPosition, ScreenCaptureAreaOptions.MediumInfoWindowSize, ScreenCaptureAreaOptions.MediumInfoWindowSize);
      // scAreaOptions.TextBackgroundColor = Color.White;
      // scAreaOptions.TextForegroundColor = Color.Black;
      // scAreaOptions.Zoom = ScreenCaptureAreaZoom.Normal;
      scEngine.ShowCaptureAreaOptionsDialog(null, ScreenCaptureDialogFlags.CaptureAreaOptionsContextHelp, scAreaOptions, true, helpCallback);

      // Define ScreenCaptureOptions and fill it using dialog
      ScreenCaptureOptions scOptions = ScreenCaptureOptions.Empty;
      // Set the ScreenCaptureHotKeyCallback, so that it gets called if the hotkey is set in the dialog
      ScreenCaptureHotkeyCallback hotkeyCallback = new ScreenCaptureHotkeyCallback(HotKeyCallback);
      ScreenCaptureEngine.SetCaptureHotkeyCallback(hotkeyCallback);
      // Open the dialog allowing the user to change the values
      // NOTE: To fill the structure manually, you can write:
      // scOptions.CancelKey = Keys.Escape;
      // scOptions.Count = 1;
      // scOptions.Cursor = Cursors.Arrow;
      // scOptions.Delay = 0;
      // scOptions.Hotkey = Keys.F11;
      // scOptions.Interval = 0;
      // scOptions.OptimizedHotkey = true;
      // scOptions.StatusCursor = Cursors.WaitCursor;
      scEngine.ShowCaptureOptionsDialog(null, ScreenCaptureDialogFlags.SetCaptureOptionsContextHelp, scOptions, helpCallback);
      // Set the Engine's ScreenCaptureOptions
      scEngine.CaptureOptions = scOptions;

      // Define ScreenCaptureObjectOptions and fill it using dialog
      ScreenCaptureObjectOptions scObjectOptions = ScreenCaptureObjectOptions.Empty;
      // Get the default Options
      scObjectOptions = ScreenCaptureEngine.DefaultCaptureObjectOptions;
      // Open the dialog allowing the user to change the values
      // NOTE: To fill the structure manually, you can write:
      // scObjectOptions.BorderWidth = 2;
      // scObjectOptions.EnableKeyboard = true;
      // scObjectOptions.Invert = false;
      // scObjectOptions.SelectCursor = Cursors.Arrow;
      scEngine.ShowCaptureObjectOptionsDialog(null, ScreenCaptureDialogFlags.CaptureObjectOptionsContextHelp, scObjectOptions, true, helpCallback);

      // Define ScreenCaptureInformation class object
      ScreenCaptureInformation scInformation = null;

      // NOTE: After preparing the structures and classes,
      // in this place you can insert any Capture method, such as:
      // CaptureWindow, CaptureActiveWindow, CaptureActiveClient, CaptureWallpaper,
      // CaptureFullScreen, CaptureMenuUnderCursor, CaptureWindowUnderCursor,
      // CaptureSelectedObject, CaptureArea, CaptureMouseCursor

      // We will Capture an Area of the screen
      RasterImage image = scEngine.CaptureArea(scAreaOptions, scInformation);

      // To get the number of resources in a EXE file
      int iconsCount = scEngine.GetResourcesCount(Path.Combine(LEAD_VARS.ImagesDir, "ExeWithResources.exe"), ScreenCaptureResourceType.Icon);

      // Finally, if the Capture is still active, then Stop it
      if (scEngine.IsCaptureActive)
         scEngine.StopCapture();

      // clean up
      image.Dispose();

      // Shutdown the ScreenCapture
      ScreenCaptureEngine.Shutdown();
   }

   bool HotKeyCallback(Keys key)
   {
      // Here you can do anything with the pressed key
      // we will just show a message box
      MessageBox.Show("You pressed the " + key.ToString() + "character.");

      return true;
   }

   void HelpCallback(ScreenCaptureHelpType helpType, ScreenCaptureControlId controlId)
   {
      // Show a MessageBox mentioning the name of the dialog that called the help,
      // and which control ID was requested.
      switch(helpType)
      {
         case ScreenCaptureHelpType.CaptureAreaOptions:
            MessageBox.Show("Capture Area Options Dialog Help Button\n" + 
               "Control Id: " + controlId.ToString() + ".");
            break;
         case ScreenCaptureHelpType.CaptureFromExe:
            MessageBox.Show("Capture From EXE Dialog Help Button\n" +
               "Control Id: " + controlId.ToString() + ".");
            break;
         case ScreenCaptureHelpType.CaptureObjectOptions:
            MessageBox.Show("Capture Object Options Dialog Help Button\n" +
               "Control Id: " + controlId.ToString() + ".");
            break;
         case ScreenCaptureHelpType.SetCaptureOptions:
            MessageBox.Show("Capture Options Dialog Help Button\n" +
               "Control Id: " + controlId.ToString() + ".");
            break;
         default:
            // will never reach here
            break;
      }
   }

   void scEngine_CaptureInformation(object sender, ScreenCaptureInformationEventArgs e)
   {
      // Make sure that the image was captured successfully
      Debug.Assert(e.Image != null);

      // Define codecs class object to save the image
      RasterCodecs codecs = new RasterCodecs();
      codecs.ThrowExceptionsOnInvalidImages = true;

      // Save the resulted Image
      codecs.Save(e.Image,Path.Combine(LEAD_VARS.ImagesDir,"Out_CapturedImage.bmp"), RasterImageFormat.Bmp, 24);


      // NOTE: e.Information is a ScreenCaptureInformation structure filled with information
      // about the captured image, this information can be used here
      // Display a MessageBox with the bounds of the capture area
      MessageBox.Show("Captured Area Bounds:\n" +
         "Top:" + e.Information.Area.Top.ToString() + "\n" +
         "Left:" + e.Information.Area.Left.ToString() + "\n" +
         "Right:" + e.Information.Area.Right.ToString() + "\n" +
         "Bottom:" + e.Information.Area.Bottom.ToString());

      // everything worked fine
      e.Cancel = false;
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
Requirements

Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

See Also

Reference

ScreenCaptureEngine Members
Leadtools.ScreenCapture Namespace
Implementing Screen Capture
ScreenCaptureInformation Class
ScreenCaptureInformationEventArgs Class
ScreenCaptureOptions Structure
ScreenCaptureAreaOptions Structure
ScreenCaptureObjectOptions Structure
ScreenCaptureException Class

 

 


Products | Support | Contact Us | Copyright Notices

© 2006-2012 All Rights Reserved. LEAD Technologies, Inc.