Record Screen Video from Command Line Console - VB.NET
Screen Capturing SDK sample in VB.NET demonstrating ‘Record Screen Video from Command Line Console’
Module1.vb
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Globalization
Imports System.Threading
Imports System.Runtime.InteropServices
Imports BytescoutScreenCapturingLib
' NOTE: if you are getting error like "invalid image" related to loading the SDK's dll then
' try to do the following:
' 1) remove the reference to the SDK by View - Solution Explorer
' then click on References, select Bytescout... reference name and right-click it and select Remove
' 2) To re-add click on the menu: Project - Add Reference
' 3) In "Add Reference" dialog switch to "COM" tab and find Bytescout...
' 4) Select it and click "Add"
' 5) Recompile the application
' Note: if you need to run on both x64 and x86 then please make sure you have set "Embed Interop Types" to True for this reference
Module Module1
Public Class Win32Interop
<DllImport("crtdll.dll")> _
Public Shared Function _kbhit() As Integer
End Function
End Class
Sub Main(ByVal args As String())
Dim capturer As New Capturer()
If args.Length < 1 Then
usage(capturer)
Exit Sub
End If
capturer.OutputFileName = args(0)
capturer.CapturingType = CaptureAreaType.catRegion
' set border style
capturer.CaptureAreaBorderType = CaptureAreaBorderType.cabtDashed
' uncomment to enable recording of semitransparent or layered windows (Warning: may cause mouse cursor flickering)
' capturer.CaptureTransparentControls = true
' // 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.WMVVideoBitrate = capturer.WMVVideoBitrate * 2
setParams(args, capturer)
Try
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("Starting capture - Hit a key to stop ...")
Dim s As String = capturer.CurrentVideoCodecName
Console.WriteLine(String.Format("Using video compressor - {0}", s))
s = capturer.CurrentAudioCodecName
Console.WriteLine(String.Format("Using audio compressor - {0}", s))
s = capturer.CurrentAudioDeviceLineName
Console.WriteLine(String.Format("Using audio input line - {0}", s))
Dim i As Integer = 0
Dim spin As String = "|/-\"
While Win32Interop._kbhit() = 0
Console.Write(String.Format(vbCr & "Encoding {0}", spin(i)))
i = i + 1
i = i Mod 4
Thread.Sleep(50)
End While
capturer.Stop()
' Release(Resources)
System.Runtime.InteropServices.Marshal.ReleaseComObject(capturer)
capturer = Nothing
Console.Write(vbLf & "Done")
Console.Read()
Catch generatedExceptionName As Exception
Console.WriteLine(capturer.LastError)
End Try
End Sub
Private Sub usage(ByVal capturer As Capturer)
Console.WriteLine("Usage : CaptureScreenCSharp.exe <outfilename> [left] [top] [width] [height] [fps] [v-codec] [a-codec] [audioline]" & vbLf)
Console.WriteLine("[left, top, width, height] is the rectangle to be captured")
Console.WriteLine("[v-codec] is the index of the video codec in the list to use.")
Console.WriteLine("[a-codec] is the index of the audio codec in the list to use.")
Console.WriteLine("[audioline] is the index of the audio line in the list to capture from")
Console.WriteLine("If either codec is unspecified, it defaults to 'Microsoft Video 1' and 'GSM 6.10'")
Console.WriteLine("If audioline is unspecified, it uses the microphone")
Console.WriteLine("To capture the currently playing output, select the stereo, mono or wave mix")
Console.WriteLine("Installed Video Codecs (Note : Not all of them may work)")
For i As Integer = 0 To capturer.VideoCodecsCount - 1
Dim name As String = capturer.GetVideoCodecName(i)
Console.WriteLine(String.Format(" {0}. {1}", i, name))
Next
Console.WriteLine(vbLf & "Installed Audio Codecs (Note : Not all of them may work)")
For i As Integer = 0 To capturer.AudioCodecsCount - 1
Dim name As String = capturer.GetAudioCodecName(i)
Console.WriteLine(String.Format(" {0}. {1}", i, name))
Next
Console.WriteLine(vbLf & "Audio input lines")
For i As Integer = 0 To capturer.CurrentAudioDeviceLineCount - 1
Dim name As String = capturer.GetCurrentAudioDeviceLineName(i)
Console.WriteLine(String.Format(" {0}. {1}", i, name))
Next
End Sub
Private Sub setParams(ByVal args As String(), ByVal capturer As Capturer)
If args.Length > 1 Then
Dim left As Integer = Integer.Parse(args(1))
capturer.CaptureRectLeft = left
End If
If args.Length > 2 Then
Dim top As Integer = Integer.Parse(args(2))
capturer.CaptureRectTop = top
End If
If args.Length > 3 Then
Dim width As Integer = Integer.Parse(args(3))
capturer.CaptureRectWidth = width
End If
If args.Length > 5 Then
Dim height As Integer = Integer.Parse(args(5))
capturer.CaptureRectHeight = height
End If
If args.Length > 6 Then
Dim fps As Single = Single.Parse(args(6), CultureInfo.InvariantCulture)
capturer.FPS = fps
End If
If args.Length > 7 Then
Dim vCodec As Integer = Integer.Parse(args(7))
capturer.CurrentVideoCodec = vCodec
End If
If args.Length > 8 Then
Dim aCodec As Integer = Integer.Parse(args(8))
capturer.CurrentAudioCodec = aCodec
End If
If args.Length > 9 Then
Dim aLine As Integer = Integer.Parse(args(9))
capturer.CurrentAudioDeviceLine = aLine
End If
End Sub
End Module
+ Show More
Explore SDK documentations here.
Resources.Designer.vb
��'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.4918
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'<summary>
' A strongly-typed resource class, for looking up localized strings, etc.
'</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'<summary>
' Returns the cached ResourceManager instance used by this class.
'</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CaptureScreenVB.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'<summary>
' Overrides the current thread's CurrentUICulture property for all
' resource lookups using this strongly typed resource class.
'</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set(ByVal value As Global.System.Globalization.CultureInfo)
resourceCulture = value
End Set
End Property
End Module
End Namespace
+ Show More
Explore SDK documentations here.
Settings.Designer.vb
��'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.4918
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.CaptureScreenVB.My.MySettings
Get
Return Global.CaptureScreenVB.My.MySettings.Default
End Get
End Property
End Module
End Namespace
+ Show More
Explore SDK documentations here.