Hallo,
Vorhaben: Ich hoffe ihr könnt mir weiter helfen und zwar bastle ich mir grade meine eigene Oberfläche für meinen CarPC. In diese möchte ich eine Webcam als Rückfahrkamera integrieren. Eine Picturebox soll das Livebild auf Buttondruck direkt anzeigen. Ich benutze dazu den angehängten Code.
Problem: Wenn ich nun auf den Button drücke öffnet sich zuerst ein weiteres Fenster, bei dem ich eine Videoquelle aussuchen soll was ich aber nicht möchte. Ich hab auch schon probiert die nCameraID zu ändern. Sobald diese nicht 0 ist kommt auch das Auswahlfenster nicht mehr aber meine Picturebox ist einfach nur schwarz.
Frage: Wie bekomme ich diese nCameraID meiner Webcam heraus oder gibt es andere Lösungen dafür?
Bin für jede Hilfe dankbar
Vorhaben: Ich hoffe ihr könnt mir weiter helfen und zwar bastle ich mir grade meine eigene Oberfläche für meinen CarPC. In diese möchte ich eine Webcam als Rückfahrkamera integrieren. Eine Picturebox soll das Livebild auf Buttondruck direkt anzeigen. Ich benutze dazu den angehängten Code.
Problem: Wenn ich nun auf den Button drücke öffnet sich zuerst ein weiteres Fenster, bei dem ich eine Videoquelle aussuchen soll was ich aber nicht möchte. Ich hab auch schon probiert die nCameraID zu ändern. Sobald diese nicht 0 ist kommt auch das Auswahlfenster nicht mehr aber meine Picturebox ist einfach nur schwarz.
Frage: Wie bekomme ich diese nCameraID meiner Webcam heraus oder gibt es andere Lösungen dafür?
Bin für jede Hilfe dankbar
Quellcode
- Dim videoHandle As IntPtr
- Declare Auto Function SendMessage Lib "user32" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
- Declare Auto Function capCreateCaptureWindow Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Integer, ByVal x As Short, ByVal y As Integer, ByVal nWidth As Short, ByVal nHeight As Short, ByVal hWndParent As IntPtr, ByVal nID As Byte) As IntPtr
- Const EM_LINEFROMCHAR As Integer = &HC9
- Const EM_LINEINDEX As Integer = &HBB
- Const WS_CHILD As Integer = &H40000000
- Const WS_VISIBLE As Integer = &H10000000
- Const WM_USER As Short = &H400S
- Const WM_CAP_START As Short = &H400S
- Const WM_CAP_EDIT_COPY As Short = WM_CAP_START + 30
- Const WM_CAP_DRIVER_CONNECT As Short = WM_CAP_START + 10
- Const WM_CAP_SET_PREVIEWRATE As Short = WM_CAP_START + 52
- Const WM_CAP_SET_OVERLAY As Short = WM_CAP_START + 51
- Const WM_CAP_SET_PREVIEW As Short = WM_CAP_START + 50
- Const WM_CAP_DRIVER_DISCONNECT As Short = WM_CAP_START + 11
- Function CreateCaptureWindow(ByRef hWndParent As IntPtr, Optional ByRef x As Short = 0, Optional ByRef y As Short = 0, Optional ByRef nWidth As Short = 640, Optional ByRef nHeight As Short = 420, Optional ByRef nCameraID As Integer = 0) As IntPtr
- Dim previewHandle As IntPtr
- previewHandle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, x, y, nWidth, nHeight, hWndParent, 1)
- SendMessage(previewHandle, WM_CAP_DRIVER_CONNECT, nCameraID, 0)
- SendMessage(previewHandle, WM_CAP_SET_PREVIEWRATE, 30, 0)
- SendMessage(previewHandle, WM_CAP_SET_OVERLAY, 1, 0)
- SendMessage(previewHandle, WM_CAP_SET_PREVIEW, 1, 0)
- Return previewHandle
- End Function
- Sub Disconnect(ByRef nCaptureHandle As IntPtr, Optional ByRef nCameraID As Integer = 0)
- SendMessage(nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, nCameraID, 0)
- End Sub
- Sub Form1_FormClosing() Handles Me.FormClosing
- Me.Disconnect(videoHandle)
- End Sub
- Sub Button1_Click() Handles button1.Click
- videoHandle = Me.CreateCaptureWindow(PictureBox1.Handle)
- End Sub