LEADTOOLSスクリーンキャプチャ(Leadtools.ScreenCaptureアセンブリ)

フレームを表示

ScreenCaptureEngineクラス






メンバ 
スクリーンキャプチャエンジンのための主要なクラス。
オブジェクトモデル
構文
public class ScreenCaptureEngine : System.IDisposable  
'Declaration
 
Public Class ScreenCaptureEngine 
   Implements System.IDisposable 
'Usage
 
Dim instance As ScreenCaptureEngine

            

            
public ref class ScreenCaptureEngine : public System.IDisposable  
サンプル

スクリーンキャプチャの構造体、クラスオブジェクトを定義し、スクリーンの領域をキャプチャし、EXEファイル内のリソース数を数えます。

Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ScreenCapture

WithEvents scEngine As ScreenCaptureEngine
<TestMethod()> _
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
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ScreenCapture;

[TestMethod]
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";
}
必要条件

ターゲットプラットホーム

参照

参照

ScreenCaptureEngineメンバ
Leadtools.ScreenCapture名前空間
スクリーンキャプチャの実装
ScreenCaptureInformationクラス
ScreenCaptureInformationEventArgsクラス
ScreenCaptureOptions構造体
ScreenCaptureAreaOptions構造体
ScreenCaptureObjectOptions構造体
ScreenCaptureExceptionクラス