Screen Capture Implementation Guide¶
Video Capture SDK .Net VideoCaptureCoreX VideoCaptureCore
Introduction to Screen Capture¶
Screen capture technology enables developers to programmatically record and stream visual content displayed on a computer monitor. This powerful functionality serves as the foundation for numerous applications including:
- Remote support and technical assistance tools
- Software demonstration and tutorial creation
- Gameplay recording and streaming
- Webinar and presentation systems
- Quality assurance and testing automation
Video Capture SDK .Net provides developers with robust tools for capturing screen content with high performance and flexibility. The SDK supports capturing entire screens, individual application windows, or custom-defined screen regions.
Platform Support and Technology Overview¶
Windows Implementation¶
On Windows platforms, the SDK leverages the power of DirectX technologies to achieve optimal performance. Developers can choose between:
- DirectX 9: Legacy support for older systems
- DirectX 11/12: Modern implementation offering superior performance and efficiency
DirectX 11 is particularly recommended for window capture scenarios due to its improved handling of window composition and superior performance characteristics.
Core Capture Configuration¶
The VideoCaptureCore implementation provides straightforward configuration options to control the capture process:
AllowCaptureMouseCursor: Enable or disable cursor visibility in the captured contentDisplayIndex: Select which display to capture in multi-monitor setups (zero-indexed)ScreenPreview/ScreenCapture: Set the operational mode for viewing or recording
Advanced Capture Configuration¶
VideoCaptureCoreX offers more granular control through dedicated configuration classes:
ScreenCaptureDX9SourceSettings: Configure DirectX 9 based captureScreenCaptureD3D11SourceSettings: Configure DirectX 11 based capture with enhanced performance
Full Screen and Region Capture Implementation¶
Capturing either a complete screen or a defined screen region is a common requirement for many applications. Below are the implementation approaches for both VideoCaptureCore and VideoCaptureCoreX.
Configuring Full Screen and Region Capture¶
The following code demonstrates how to configure screen capture settings for either full screen mode or a specific rectangular region:
// Set screen capture source settings
VideoCapture1.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
// Set to true to capture the full screen
FullScreen = false,
// Set the left position of the screen area
Left = 0,
// Set the top position of the screen area
Top = 0,
// Set the width of the screen area
Width = 640,
// Set the height of the screen area
Height = 480,
// Set the display index
DisplayIndex = 0,
// Set the frame rate
FrameRate = new VideoFrameRate(25),
// Set to true to capture the mouse cursor
AllowCaptureMouseCursor = true
};
When FullScreen is set to true, the Left, Top, Width, and Height properties are ignored, and the entire screen specified by DisplayIndex is captured.
For multi-monitor setups, the DisplayIndex property identifies which monitor to capture, with 0 representing the primary display.
Advanced Screen Capture with DirectX 11¶
VideoCaptureCoreX provides a more powerful implementation using DirectX 11 technology:
// Display index
var screenID = 0;
// Create a new screen capture source using DirectX 11
var source = new ScreenCaptureD3D11SourceSettings();
// Set the capture API
source.API = D3D11ScreenCaptureAPI.WGC;
// Set the frame rate
source.FrameRate = new VideoFrameRate(25);
// Set the screen area or full screen mode
if (fullscreen)
{
// Enumerate all screens and set the screen area
for (int i = 0; i < System.Windows.Forms.Screen.AllScreens.Length; i++)
{
if (i == screenID)
{
source.Rectangle = new VisioForge.Core.Types.Rect(System.Windows.Forms.Screen.AllScreens[i].Bounds);
}
}
}
else
{
// Set the screen area
source.Rectangle = new VisioForge.Core.Types.Rect(0, 0, 1280, 720);
}
// Set to true to capture the mouse cursor
source.CaptureCursor = true;
// Set the monitor index
source.MonitorIndex = screenID;
// Set the screen capture source
VideoCapture1.Video_Source = source;
The Windows Graphics Capture (WGC) API option provides excellent performance on Windows 10 and higher. This approach also demonstrates the use of System.Windows.Forms.Screen.AllScreens to programmatically determine the bounds of available displays.
Window Capture Implementation¶
Capturing specific application windows allows for targeted recording of individual applications without including other desktop content. This is particularly useful for:
- Application-specific tutorials
- Software demos
- Support scenarios where only a single application is relevant
Basic Window Capture¶
To capture a specific window with VideoCaptureCore:
// Set screen capture source settings
VideoCapture1.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
// Disable full screen capture
FullScreen = false,
// Set the window handle
WindowHandle = windowHandle,
// Set the frame rate
FrameRate = new VideoFrameRate(25),
// Set to true to capture the mouse cursor
AllowCaptureMouseCursor = true
};
The windowHandle parameter should contain a valid handle to the target window. This can be obtained using Windows API functions like FindWindow or by using UI automation libraries.
Enhanced Window Capture¶
VideoCaptureCoreX provides an optimized window capture implementation:
// Create Direct3D11 source
var source = new ScreenCaptureD3D11SourceSettings();
// Set the capture API
source.API = D3D11ScreenCaptureAPI.WGC;
// Set frame rate
source.FrameRate = new VideoFrameRate(25);
// Set the window handle
source.WindowHandle = windowHandle;
VideoCapture1.Video_Source = source; // Set the screen capture source
The DirectX 11 implementation offers better performance, particularly for capturing applications that use hardware acceleration.
Performance Optimization Techniques¶
Optimizing screen capture performance is crucial for maintaining high frame rates while minimizing CPU and memory usage. Consider the following best practices:
Frame Rate Management¶
Carefully select an appropriate frame rate based on your application requirements:
- For general purpose recording: 15-30 FPS is typically sufficient
- For gaming or motion-intensive content: 30-60 FPS may be necessary
- For static or document-based content: 5-10 FPS can reduce resource usage significantly
Resolution Considerations¶
Higher resolution captures require more processing power and memory. Consider:
- Capturing at a lower resolution and scaling up if appropriate
- Using region capture instead of full screen when only part of the screen is relevant
- Implementing resolution switching based on content type
Hardware Acceleration¶
When available, using DirectX 11/12 with hardware acceleration can significantly improve performance:
- Reduces CPU load by leveraging the GPU
- Provides better frame rates, especially with high-resolution content
- Allows for more efficient encoding when combined with hardware accelerated video encoders
Advanced Implementation Scenarios¶
Multi-Monitor Configuration¶
Working with multi-monitor setups requires special consideration:
// Detect all available monitors
var screens = System.Windows.Forms.Screen.AllScreens;
// Create a list to present to the user
var screenOptions = new List<string>();
for (int i = 0; i < screens.Length; i++)
{
screenOptions.Add($"Monitor {i+1}: {screens[i].Bounds.Width} x {screens[i].Bounds.Height}");
}
// Once a selection is made, set the appropriate DisplayIndex/MonitorIndex
Application Window Selection¶
Providing users with the ability to select a window to capture:
// Get all open windows
var openWindows = GetOpenWindows(); // Implementation depends on your approach
// Present the list to the user for selection
// Once selected, get the window handle
// Configure the capture with the selected window handle
VideoCapture1.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
WindowHandle = selectedWindowHandle,
// Additional configuration...
};
Dynamic Region Selection¶
Allowing users to interactively select a screen region to capture:
// Create a form with transparent background
var selectionForm = new Form
{
FormBorderStyle = FormBorderStyle.None,
WindowState = FormWindowState.Maximized,
Opacity = 0.3,
BackColor = Color.Black
};
// Add mouse event handlers to track selection rectangle
// Once selection is complete
// Configure capture with the selected region
VideoCapture1.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
Left = selection.Left,
Top = selection.Top,
Width = selection.Width,
Height = selection.Height,
// Additional configuration...
};
Troubleshooting Common Issues¶
Blank or Black Capture¶
If the captured content appears blank or black:
- Verify that you have appropriate permissions for the window or screen
- Check if the application uses hardware acceleration that might conflict with capture
- Try alternate DirectX versions (9 vs 11/12)
- For protected content (like DRM video), capture may be blocked by security mechanisms
Performance Issues¶
If experiencing slow or stuttering capture:
- Reduce capture resolution and/or frame rate
- Use DirectX 11/12 instead of DirectX 9 when available
- Close unnecessary background applications
- Verify that hardware acceleration is enabled when applicable
Conclusion¶
Screen capture functionality enables developers to create powerful applications for demonstration, education, support, and entertainment purposes. The Video Capture SDK .Net provides a robust framework for implementing this functionality with minimal development effort.
By leveraging the appropriate configuration options for your specific requirements, you can implement high-performance screen capture features in your .NET applications.
Visit our GitHub page to get more code samples.