Here is one method written by member strongm. I don't know the exact thread.....
This is generic code, and should work with most - if not all - USB webcams. You'll need a form with 3 command buttons, a listbox (to show all the webcams that the PC knows about), a picturebox (to dsplay what the webcam is capturing, and a common dialog control. Then just drop in this code:
Const WM_CAP As Integer = &H400
Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP + 10
Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP + 11
Const WM_CAP_EDIT_COPY As Long = WM_CAP + 30
Const WM_CAP_SET_PREVIEW As Long = WM_CAP + 50
Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP + 52
Const WM_CAP_SET_SCALE As Long = WM_CAP + 53
Const WS_CHILD As Long = &H40000000
Const WS_VISIBLE As Long = &H10000000
Const SWP_NOMOVE As Long = &H2
Const SWP_NOSIZE As Integer = 1
Const SWP_NOZORDER As Integer = &H4
Const HWND_BOTTOM As Integer = 1
Dim iDevice As Long ' Current device ID
Dim hHwnd As Long ' Handle to preview window
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean
Private Declare Function capCreateCaptureWindowA Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, ByVal hWndParent As Long, ByVal nID As Long) As Long
Private Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Long, ByVal lpszName As String, ByVal cbName As Long, ByVal lpszVer As String, ByVal cbVer As Long) As Boolean
Private Sub cmdSave_Click()
Dim bm As Image
' Copy image to clipboard
SendMessage hHwnd, WM_CAP_EDIT_COPY, 0, 0
ClosePreviewWindow
picCapture.Picture = Clipboard.GetData
CommonDialog1.CancelError = True
CommonDialog1.FileName = "Webcam1"
CommonDialog1.Filter = "Bitmap |*.bmp"
On Error GoTo NoSave
CommonDialog1.ShowSave
SavePicture picCapture.Image, CommonDialog1.FileName
NoSave:
cmdStop.Enabled = False
cmdSave.Enabled = False
cmdStart.Enabled = True
End Sub
Private Sub cmdStart_Click()
iDevice = lstDevices.ListIndex
OpenPreviewWindow
End Sub
Private Sub cmdStop_Click()
ClosePreviewWindow
cmdStop.Enabled = False
cmdSave.Enabled = False
cmdStart.Enabled = True
End Sub
Private Sub Form_Load()
LoadDeviceList
If lstDevices.ListCount > 0 Then
lstDevices.Selected(0) = True
Else
cmdStart.Enabled = False
lstDevices.AddItem ("No Device Available")
End If
cmdStop.Enabled = False
cmdSave.Enabled = False
End Sub
Private Sub LoadDeviceList()
Dim strName As String
Dim strVer As String
Dim iReturn As Boolean
Dim x As Long
x = 0
strName = Space(100)
strVer = Space(100)
' Load name of all available devices into lstDevices
Do
' Get Driver name and version
iReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100)
' If there was a device add device name to the list
If iReturn Then lstDevices.AddItem Trim$(strName)
x = x + 1
Loop Until iReturn = False
End Sub
Private Sub OpenPreviewWindow()
' Open Preview window in picturebox
hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, 480, picCapture.hwnd, 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.ScaleWidth, picCapture.ScaleHeight, SWP_NOMOVE Or SWP_NOZORDER
cmdSave.Enabled = True
cmdStop.Enabled = True
cmdStart.Enabled = False
Else
' Error connecting to device close window
DestroyWindow hHwnd
cmdSave.Enabled = False
End If
End Sub
Private Sub ClosePreviewWindow()
' Disconnect from device
SendMessage hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0
' close window
DestroyWindow hHwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
If cmdStop.Enabled Then
ClosePreviewWindow
End If
End Sub