Getting Started in Visual Basic .NET (advanced example)ByteScout Screen Capturing SDK

The following advanced example demonstrates how to use Screen Capturer ActiveX in Visual Basic .NET and capture video from screen into AVI video file with ability to set video compression codec, audio compression codec and other parameters.

Before using the code, click Project and Add Reference.., switch to COM tab and select BytescoutScreenCapturingLib in the list of available ActiveX and COM objects and click OK as shown on the screenshot below:

net add reference to capturerlib
VB
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Globalization
Imports System.Threading
Imports System.Runtime.InteropServices

Imports BytescoutScreenCapturingLib

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 CapturerClass()

        If args.Length < 1 Then
            usage(capturer)
            Exit Sub
        End If

        capturer.OutputFileName = args(0)
        capturer.CapturingType = CaptureAreaType.catRegion

        setParams(args, capturer)

        Try
            capturer.Run()
            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.CurrentAudioLineName
            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()
            Console.Write(vbLf & "Done")
            Console.Read()
        Catch generatedExceptionName As Exception
            Console.WriteLine(capturer.LastError)
        End Try
    End Sub

    Private Sub usage(ByVal capturer As CapturerClass)
        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.AudioLinesCount - 1
            Dim name As String = capturer.GetAudioLineName(i)
            Console.WriteLine(String.Format("    {0}. {1}", i, name))
        Next
    End Sub

    Private Sub setParams(ByVal args As String(), ByVal capturer As CapturerClass)
        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.CurrentAudioLine = aLine
        End If
    End Sub

End Module