public class ScreenCaptureEngine : IDisposable
Public Class ScreenCaptureEngine
Implements System.IDisposable
public ref class ScreenCaptureEngine : public System.IDisposable
Defines screen capture structures, and class objects, captures an area of the screen, and then counts the number of resources in an EXE file
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ScreenCapture;
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:\LEADTOOLS21\Resources\Images";
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ScreenCapture
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:\LEADTOOLS21\Resources\Images"
End Class
Leadtools.ScreenCapture Namespace
ScreenCaptureInformation Class
ScreenCaptureInformationEventArgs Class
ScreenCaptureOptions Structure
ScreenCaptureAreaOptions Structure
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document