Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2010, 19:56
Avatar de Rimba
Rimba
 
Fecha de Ingreso: mayo-2007
Mensajes: 33
Antigüedad: 16 años, 11 meses
Puntos: 0
Grabar video con Webcam

hola chicos, como andan? la verdad que estoy un poco trabado con esto que quiero hacer.. Les cuento. La idea es hacer un soft que al apretar un boton comience a grabar lo que capture la webcam y una vez pasado 30 segundos termine y lo guarde. El programa que quiero hacer es para esas cabinas de video que uno deja el mensaje guardado para los novios por ejemplo, o para el cumpleañero..Parece sencillo el soft pero me he trabado porque como ven en el codigo, una vez que doy click al boton de start ejecuta el metodo sendmessage..

Despues tengo un contador, que es el q simula el reloj descendiente y despues esta el metodo para finalizar la grabacion. si uds copian esto en un form va a andar creo que perfectamente..El tema es que la unica forma de hacer parar la grabacion es presionando el boton.. No logro que me entre de alguna forma al procedimiento timer1_tick..

Es como si se colgara. Es mas, cuando el formulario esta grabando, se pone el icono del mouse con el relojito de arena..No se como hacer para que despues de 30 segundos lo guarde.

Bueno, espero su ayuda, comentarios.. cualquier otra ayuda vendria barbaro igualmente, mas alla que no sea utilizando el codigo de abajo..Nose.. estoy trabado..je..
Mil gracias.. y saludos a todos Martin


Código:
Imports System
Imports System.Runtime.InteropServices
Public Class Presentacion
    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 As Integer, _
            ByVal lpszVer As String, _
            ByVal cbVer As Integer) As Boolean

    '--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 As Integer, _
            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 VideoSource As Integer
    '---used as a window handle---
    Dim hWnd As Integer
    Dim i As Integer = 30
    Private Sub btnInicio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btninicio.Click
        Timer1.Enabled = True
        'btnStartRecording.Enabled = False
        'btnStopRecording.Enabled = True
        '---start recording---
        SendMessage(hWnd, WM_CAP_SEQUENCE, 0, 0)
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If i >= 0 Then
            lbltic.Text = CStr(i) + ":00"
            i -= 1
            If i = -1 Then
                Me.Label1.Visible = True
                Me.btnFin_Click(sender, e)
            End If
        End If
    End Sub

    Private Sub btnFin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnfin.Click
        Timer1.Stop()
        SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, "C:\recordedvideo.avi")
    End Sub

End Class