Tools Links Login

Play an AVI in a Picturebox

Just a little bit of code will allow you to play AVI files within your application. Great for media players, instructional apps, etc.

Module

Const WS_CHILD = &H40000000

Private Declare Function mciSendString Lib "winmm.dll" Alias _
    "mciSendStringA" (ByVal lpstrCommand As String, _
    ByVal lpstrReturnString As String, ByVal uReturnLength As Long, _
    ByVal hwndCallback As Long) As Long

Private Declare Function mciGetErrorString Lib "winmm.dll" Alias _
    "mciGetErrorStringA" (ByVal dwError As Long, _
    ByVal lpstrBuffer As String, ByVal uLength As Long) As Long

Private Declare Function GetShortPathName Lib "kernel32.dll" Alias _
    "GetShortPathNameA" (ByVal lpszLongPath As String, _
    ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Sub PlayAVIPictureBox(FileName As String, ByVal Window As PictureBox)
    Dim RetVal As Long
    Dim CommandString As String
    Dim ShortFileName As String * 260
    Dim deviceIsOpen As Boolean

    ' Retrieve short file name format
    RetVal = GetShortPathName(FileName, ShortFileName, Len(ShortFileName))
    FileName = Left$(ShortFileName, RetVal)
    
    ' Open the device
    CommandString = "Open " & FileName & " type AVIVideo alias AVIFile parent " & _
    CStr(Window.hWnd) & " style " & CStr(WS_CHILD)
    RetVal = mciSendString(CommandString, vbNullString, 0, 0&)
    If RetVal Then GoTo error
        ' remember that the device is now open
        deviceIsOpen = True
        ' Resize the movie to PictureBox size
        CommandString = "put AVIFile window at 0 0 " & CStr _
        (Window.ScaleWidth / Screen.TwipsPerPixelX) & " " & _
        CStr(Window.ScaleHeight / Screen.TwipsPerPixelY)
        RetVal = mciSendString(CommandString, vbNullString, 0, 0&)
    If RetVal <> 0 Then GoTo error
    
    ' Play the file
    CommandString = "Play AVIFile wait"
    RetVal = mciSendString(CommandString, vbNullString, 0, 0&)
    If RetVal <> 0 Then GoTo error
    
    ' Close the device
    CommandString = "Close AVIFile"
    RetVal = mciSendString(CommandString, vbNullString, 0, 0&)
    If RetVal <> 0 Then GoTo error

    Exit Sub
    
error:
    ' An error occurred.
    ' Get the error description
    Dim ErrorString As String
    ErrorString = Space$(256)
    mciGetErrorString RetVal, ErrorString, Len(ErrorString)
    ErrorString = Left$(ErrorString, InStr(ErrorString, vbNullChar) - 1)

    ' close the device if necessary
    If deviceIsOpen Then
        CommandString = "Close AVIFile"
        mciSendString CommandString, vbNullString, 0, 0&
    End If

    ' raise a custom error, with the proper description
    Err.Raise 999, , ErrorString

End Sub

Usage

Create a Form with a PictureBox and a Command Button

Option Explicit

Private Sub Command1_Click()
    PlayAVIPictureBox "c:\winnt\clock.avi", Picture1
End Sub

About this post

Posted: 2019-10-02
By: svsnagesh
Viewed: 296 times

Categories

Visual Basic 6

Attachments

No attachments for this post

Special Instructions

This code originally appeared on AndreaVB.com, and has been republished here with the permission of Andrea Tincani.


Loading Comments ...

Comments

No comments have been added for this post.

You must be logged in to make a comment.