A windows software app that captures webcam images using the Microsoft avicap32.dll. Developed using Microsoft Visual Studio 2008 in Visual Basic.Net. Source code along with the release are for educational purposes only. Download the source code in this link and the release bin here.
Source Code Bits
This are the windows calls used to interact with avicap32.dll api, you may copy this source:
Const WM_CAP As Short = &H400S
Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP + 10
Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP + 11
Const WM_CAP_EDIT_COPY As Integer = WM_CAP + 30
Const WM_CAP_SET_PREVIEW As Integer = WM_CAP + 50
Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP + 52
Const WM_CAP_SET_SCALE As Integer = WM_CAP + 53
Const WS_CHILD As Integer = &H40000000
Const WS_VISIBLE As Integer = &H10000000
Const SWP_NOMOVE As Short = &H2S
Const SWP_NOSIZE As Short = 1
Const SWP_NOZORDER As Short = &H4S
Const HWND_BOTTOM As Short = 1
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, _
<MarshalAs(UnmanagedType.AsAny)> ByVal lParam As Object) As Integer
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Integer, _
ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, _
ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer
Declare Function DestroyWindow Lib "user32" (ByVal hndw As Integer) As Boolean
Declare Function capCreateCaptureWindowA Lib "avicap32.dll" _
(ByVal lpszWindowName As String, ByVal dwStyle As Integer, _
ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _
ByVal nHeight As Short, ByVal hWndParent As Integer, _
ByVal nID As Integer) As Integer
Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Short, _
ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, _
ByVal cbVer As Integer) As Boolean
Procedure used to load the device:
Private Sub LoadDevice()
Dim strCamName As String = Space(100)
Dim strCamVersion As String = Space(100)
Dim bReturn As Boolean = True
Dim iCount As Integer = 0
' Load name of all avialable devices into the lstDevices
Do
' Get Driver name and version
bReturn = capGetDriverDescriptionA(iCount, strCamName, 100, strCamVersion, 100)
' If there was a device add device name to the list
If bReturn Then
iDevice = 0
lblstatus.Text = strCamName & " " & strCamVersion
End If
iCount += 1
Loop Until bReturn = False
If iCount = 0 Then
MsgBox("There is no capture device installed.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, Application.ProductName)
Me.Close()
End If
End Sub
Procedure to start the capturing of image from webcam to the picturebox control:
Private Sub StartCapture()
Dim iHeight As Integer = picCapture.Height
Dim iWidth As Integer = picCapture.Width
' Open Preview window in picturebox
hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 320, _
240, picCapture.Handle.ToInt32, 0)
' Connect to device
If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
'Set the preview scale
SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0)
'Set the preview rate in milliseconds
SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0)
'Start previewing the image from the camera
SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0)
' Resize window to fit in picturebox
SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, picCapture.Width, picCapture.Height, _
SWP_NOMOVE Or SWP_NOZORDER)
StartCaptireToolStripMenuItem.Enabled = False
EndCaptureToolStripMenuItem.Enabled = True
SaveImageToolStripMenuItem.Enabled = True
Else
' Error connecting to device close window
DestroyWindow(hHwnd)
StartCaptireToolStripMenuItem.Enabled = True
EndCaptureToolStripMenuItem.Enabled = True
SaveImageToolStripMenuItem.Enabled = True
End If
End Sub
End capture procedure:
Private Sub EndCapture()
' Disconnect from device
SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0)
' close window
DestroyWindow(hHwnd)
StartCaptireToolStripMenuItem.Enabled = True
EndCaptureToolStripMenuItem.Enabled = True
SaveImageToolStripMenuItem.Enabled = False
End Sub
Save image procedure:
Private Sub SaveImage()
Dim data As IDataObject
Dim bmap As Image
' Copy image to clipboard
SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0)
' Get image from clipboard and convert it to a bitmap
data = Clipboard.GetDataObject()
If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
bmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Image)
picCapture.Image = bmap
StartCapture()
StartCaptireToolStripMenuItem.Enabled = True
EndCaptureToolStripMenuItem.Enabled = True
SaveImageToolStripMenuItem.Enabled = False
sfdImage.Title = "Save Bitmap Image"
sfdImage.Filter = "Bitmap Image (*.bmp)|*.bmp"
sfdImage.AddExtension = True
sfdImage.AutoUpgradeEnabled = True
sfdImage.DefaultExt = ".bmp"
sfdImage.OverwritePrompt = True
sfdImage.SupportMultiDottedExtensions = True
If sfdImage.ShowDialog = DialogResult.OK Then
bmap.Save(sfdImage.FileName, Imaging.ImageFormat.Bmp)
End If
End If
End Sub
Webcam Viewer Edu is developed and maintained by Bangon Kali only for educational purpose. No copyright infringement intended.
We can email you the source code for this program.