Video Chat

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Anarchiyx3.

    Hier mal ein Beispiel. Du brauchst eine Form und eine PictureBox, die den Kamera-Stream anzeigt.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public videoHandle As IntPtr
    3. Private Declare Auto Function SendMessage Lib "user32" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    4. Const EM_LINEFROMCHAR As Integer = &HC9
    5. Const EM_LINEINDEX As Integer = &HBB
    6. Private Declare Auto Function capCreateCaptureWindow 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 Integer, ByVal hWndParent As IntPtr, ByVal nID As Integer) As IntPtr
    7. Private Const WS_CHILD As Integer = &H40000000
    8. Private Const WS_VISIBLE As Integer = &H10000000
    9. Private Const WM_USER As Short = &H400S
    10. Private Const WM_CAP_START As Short = &H400S
    11. Private Const WM_CAP_EDIT_COPY As Integer = (WM_CAP_START + 30)
    12. Private Const WM_CAP_DRIVER_CONNECT As Integer = (WM_CAP_START + 10)
    13. Private Const WM_CAP_SET_PREVIEWRATE As Integer = (WM_CAP_START + 52)
    14. Private Const WM_CAP_SET_OVERLAY As Integer = (WM_CAP_START + 51)
    15. Private Const WM_CAP_SET_PREVIEW As Integer = (WM_CAP_START + 50)
    16. Private Const WM_CAP_DRIVER_DISCONNECT As Integer = (WM_CAP_START + 11)


    Dann müsssen die Funkionen CreateCaptureWindow & CapturePicture deklariert werden:

    VB.NET-Quellcode

    1. Public Function CreateCaptureWindow(ByRef hWndParent As IntPtr, Optional ByRef x As Integer = 0, Optional ByRef y As Integer = 0, Optional ByRef nWidth As Integer = 320, Optional ByRef nHeight As Integer = 240, Optional ByRef nCameraID As Integer = 0) As IntPtr
    2. Dim previewHandle As IntPtr
    3. previewHandle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, x, y, nWidth, nHeight, hWndParent, 1)
    4. SendMessage(previewHandle, WM_CAP_DRIVER_CONNECT, nCameraID, 0)
    5. SendMessage(previewHandle, WM_CAP_SET_PREVIEWRATE, 30, 0)
    6. SendMessage(previewHandle, WM_CAP_SET_OVERLAY, 1, 0)
    7. SendMessage(previewHandle, WM_CAP_SET_PREVIEW, 1, 0)
    8. Return previewHandle
    9. End Function
    10. Public Function CapturePicture(ByRef nCaptureHandle As IntPtr) As System.Drawing.Image
    11. My.Computer.Clipboard.Clear()
    12. SendMessage(nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0)
    13. Return My.Computer.Clipboard.GetImage
    14. End Function


    So, und um die Kamera auf der Form anzeigen zu können, muss die PictureBox den Stream von der Funktion CreateCaptureWindow erhalten:

    VB.NET-Quellcode

    1. videoHandle = Me.CreateCaptureWindow(Me.PictureBox1.Handle)


    Wenn du nichts mehr anzeigen lassen willst:

    VB.NET-Quellcode

    1. Disconnect(videoHandle)
    vergessen! :D
    Hier für Disconnect:

    VB.NET-Quellcode

    1. Public Sub Disconnect(ByRef nCaptureHandle As IntPtr, Optional ByRef nCameraID As Integer = 0)
    2. SendMessage(nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, nCameraID, 0)
    3. End Sub


    Viel Spaß damit