Using a webcam

Picture
How to use a webcam in your programs...you will need:

  • PictureBox
  • Label
  • 4 x Buttons
  • ListBox
 

Now once you have them on your form,  label them as follows:



  • Label = "Double Click to start your webcam"
  • Button1 = "Stop"
  • Button2 = "Record"
  • Button3 = "Save"
  • Button4 = "Preview"
Copy and paste this code into your form.....

Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Imports Microsoft.Win32

Public Class Form1
Inherits System.Windows.Forms.Form

Const WM_CAP_START = &H400S
Const WS_CHILD = &H40000000
Const WS_VISIBLE = &H10000000
Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10
Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11
Const WM_CAP_EDIT_COPY = WM_CAP_START + 30
Const WM_CAP_SEQUENCE = WM_CAP_START + 62
Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
Const WM_CAP_SET_SCALE = WM_CAP_START + 53
Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52
Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50
Const SWP_NOMOVE = &H2S
Const SWP_NOSIZE = 1
Const SWP_NOZORDER = &H4S
Const HWND_BOTTOM = 1
'--The capGetDriverDescription function retrieves the version
' description of the capture driver--
Declare Function capGetDriverDescriptionA Lib"avicap32.dll" _
(
ByVal wDriverIndex As Short, _
ByVal lpszName As String, ByVal cbName AsInteger, _
ByVal lpszVer As String, _
ByVal cbVer As Integer) AsBoolean

'--The capCreateCaptureWindow function creates a capture window--
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 hWnd As Integer, _
ByVal nID As Integer) As Integer

'--This function sends the specified message to a window or windows--
Declare Function SendMessage Lib"user32"Alias"SendMessageA" _
(
ByVal hwnd As Integer, ByVal Msg As Integer, _
ByVal wParam As Integer, _
<MarshalAs(UnmanagedType.AsAny)>
ByVal lParam As Object) As Integer

'--Sets the position of the window relative to the screen buffer--
Declare Function SetWindowPos Lib"user32"Alias"SetWindowPos" _
(
ByVal hwnd As Integer, _
ByVal hWndInsertAfter As Integer, ByVal x As Integer, _
ByVal y AsInteger, _
ByVal cx As Integer, ByVal cy As Integer, _
ByVal wFlags As Integer) As Integer

'--This function destroys the specified window--
Declare Function DestroyWindow Lib"user32" _
(
ByVal hndw As Integer) As Boolean

'---used to identify the video source---
Dim CamSource As Integer

'---used as a window handle---
Dim hWnd As Integer

Private Sub cameraSource()
Dim DriverName As String = Space(80)
Dim DriverVersion As String = Space(80)
For i As Integer = 0 To 9
If capGetDriverDescriptionA(i, DriverName, 80, _
DriverVersion, 80)
Then
ListBox1.Items.Add(DriverName.Trim)
End If
Next
End Sub

Private Sub previewCamera(ByVal pbCtrl As PictureBox)
hWnd = capCreateCaptureWindowA(CamSource, _
WS_VISIBLE
Or WS_CHILD, 0, 0, 0, _
0, pbCtrl.Handle.ToInt32, 0)
If SendMessage( _
hWnd, WM_CAP_DRIVER_CONNECT, _
CamSource, 0)
Then
'---set the preview scale---
SendMessage(hWnd, WM_CAP_SET_SCALE, True, 0)
'---set the preview rate (ms)---
SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0)
'---start previewing the image---
SendMessage(hWnd, WM_CAP_SET_PREVIEW, True, 0)
'---resize window to fit in PictureBox control---
SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, _
pbCtrl.Width, pbCtrl.Height, _
SWP_NOMOVE
Or SWP_NOZORDER)
Else
'--error connecting to video source---
DestroyWindow(hWnd)
End If
End Sub

Private Sub stopPreviewCamera()
SendMessage(hWnd, WM_CAP_DRIVER_DISCONNECT, CamSource, 0)
DestroyWindow(hWnd)
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cameraSource()
Button4.Enabled =
False
Button1.Enabled = False
Button2.Enabled = False
Button3.Enabled = False
End Sub

Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
Label1.Visible =
False
previewCamera(PictureBox1)
Button1.Enabled =
True
Button4.Enabled = False
Button2.Enabled = True
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
CamSource = ListBox1.SelectedIndex
'---preview the selected video source
End Sub

'stop preview
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
stopPreviewCamera()
Button4.Enabled =
True
Button1.Enabled = False
End Sub

' recording
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Button3.Enabled =
True
Button2.Enabled = False
SendMessage(hWnd, WM_CAP_SEQUENCE, 0, 0)
End Sub

' stop recording and ask to save video
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim save As Integer
save = MsgBox("Do you want to save your recording video", MsgBoxStyle.YesNo + MsgBoxStyle.Information, "Recording Video")
If (save = MsgBoxResult.Yes) Then
Dim saveName As New SaveFileDialog
saveName.Filter =
"Avi file(*.avi)|*.avi"
If saveName.ShowDialog = Windows.Forms.DialogResult.OK Then
' SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, "C:\RecordedVideo.avi")
SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, saveName.FileName)
End If
End If
Me.Cursor = System.Windows.Forms.Cursors.Default
Button2.Enabled =
True
Button3.Enabled = False
End Sub

' preview
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
CamSource = ListBox1.SelectedIndex
previewCamera(PictureBox1)
Button4.Enabled =
False
Button1.Enabled = True
End Sub

End
Class