I have found an answer. I am generally used to web development, and not so much windows forms development, and I realized that I can create a variable of type picture-box, and voila, I had a handle to reference.
For information, I have my code below, after I re-factored it a bit.
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
Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriverIndex As Short, ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, ByVal cbVer 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 hWnd As Integer, ByVal nID As Integer) As Integer
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
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
Private hWnd As Integer
Private DriverVersion As Integer
Private mypicture As PictureBox = New PictureBox()
Public Sub New()
DriverVersion = ReturnDriver()
hWnd = capCreateCaptureWindowA(DriverVersion, WS_VISIBLE Or WS_CHILD, 0, 0, 0, 0, mypicture.Handle.ToInt32, 0)
End Sub
Private Function ReturnDriver() As Integer
Dim DriverName As String = Space(100)
Dim DriverVersion As String = Space(100)
Dim DriverIndex As Integer = Nothing
For i As Integer = 0 To 9
If capGetDriverDescriptionA(i, DriverName, 80, DriverVersion, 80) Then
DriverIndex = i
Exit For
End If
Next
Return DriverIndex
End Function
Public Sub StartRecording()
If SendMessage(hWnd, WM_CAP_DRIVER_CONNECT, DriverVersion, 0) Then
SendMessage(hWnd, WM_CAP_SEQUENCE, 0, 0)
End If
End Sub
Public Sub StopRecording(byval FileName As String)
Try
FileName = "C:/records/_" & FileName & ".avi"
SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, FileName)
SendMessage(hWnd, WM_CAP_DRIVER_DISCONNECT, DriverVersion, 0)
System.IO.File.Delete("C:/CAPTURE.avi")
Catch ex As Exception
End Try
End Sub
No that I have the code running, I see that the videos cannot be compressed using avicap32.dll and it is saving 200 MB videos for 10 second captures. It seems like I'll have to make sense of DirectShow.net.