public static readonly int TopInfoWindowPosition
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:\LEADTOOLS23\Resources\Images";
}