Record Screen Video From Given Window - C++ (managed)
Screen Capturing SDK sample in C++ (managed) demonstrating ‘Record Screen Video From Given Window’
AssemblyInfo.cpp
#include "stdafx.h"
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly:AssemblyTitleAttribute("CaptureFromGivenWindow")];
[assembly:AssemblyDescriptionAttribute("")];
[assembly:AssemblyConfigurationAttribute("")];
[assembly:AssemblyCompanyAttribute("")];
[assembly:AssemblyProductAttribute("CaptureFromGivenWindow")];
[assembly:AssemblyCopyrightAttribute("Copyright (c) 2011")];
[assembly:AssemblyTrademarkAttribute("")];
[assembly:AssemblyCultureAttribute("")];
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the value or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly:AssemblyVersionAttribute("1.0.*")];
[assembly:ComVisible(false)];
[assembly:CLSCompliantAttribute(true)];
[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
CaptureFromGivenWindow.cpp
// CaptureFromGivenWindow.cpp : main project file.
#include "stdafx.h"
using namespace System;
using namespace System::Threading;
using namespace System::Diagnostics;
using namespace BytescoutScreenCapturingLib;
int main(array<System::String ^> ^args)
{
// Create Capturer instance
Capturer ^capturer = gcnew Capturer();
capturer->RegistrationName = "demo";
capturer->RegistrationKey = "demo";
// Set capturing type
capturer->CapturingType = CaptureAreaType::catWindow;
// Specify window to capture by its title.
// Capturer will take the first window containing "Internet Explorer" in its title.
capturer->WindowToCapture = "Internet Explorer";
// You can also capture only a part of the window by specifying capturing rectangle
//capturer->CaptureRectLeft = 25;
//capturer->CaptureRectTop = 25;
//capturer->CaptureRectWidth = 320;
//capturer->CaptureRectHeight = 240;
// WMV and WEBM output use WMVVideoBitrate property to control output video bitrate
// so try to increase it by x2 or x3 times if you think the output video are you are getting is laggy
// capturer->put_WMVVideoBitrate(capturer->WMVVideoBitrate * 2);
// uncomment to enable recording of semitransparent or layered windows (Warning: may cause mouse cursor flickering)
// capturer->CaptureTransparentControls = true;
// Set output video width and height
capturer->OutputWidth = 640;
capturer->OutputHeight = 480;
// set border style
capturer.CaptureAreaBorderType = CaptureAreaBorderType::cabtDashed;
// Set output file name
capturer->OutputFileName = "Output.wmv";
// Start capturing
capturer->Run();
// IMPORTANT: if you want to check for some code if need to stop the recording then make sure you are
// using Thread.Sleep(1) inside the checking loop, so you have the loop like
// Do {
// Thread.Sleep(1)
// }
// While(StopButtonNotClicked);
Console::WriteLine("Capture window for 5s...");
// Wait for 5 seconds
Thread::Sleep(5000);
// Stop capturing
capturer->Stop();
// Release resources
System::Runtime::InteropServices::Marshal::ReleaseComObject(capturer);
//capturer = NULL;
Console::WriteLine("Done.");
// Open the capture video in default associated application
Process::Start("Output.wmv");
return 0;
}
resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by app.rc
stdafx.cpp
// stdafx.cpp : source file that includes just the standard includes
// CaptureFromGivenWindow.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
stdafx.h
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
// TODO: reference additional headers your program requires here