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(LeadtoolsExamples.Common.ImagesPath.Path + "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.Startup(); RasterCodecs codecs = new RasterCodecs(); codecs.ThrowExceptionsOnInvalidImages = true; // Save the resulted Image codecs.Save(e.Image, LeadtoolsExamples.Common.ImagesPath.Path + "CapturedImage.bmp", RasterImageFormat.Bmp, 24); RasterCodecs.Shutdown(); // 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; } |