Webcam Problem

  • Hi Community,
    wenn ich dieses Skript starte dann kommt ein Fenster in dem ich mich in meiner Webcam sehen.
    Aber wenn ich das Prog schließe und wieder starte kommt plötzlich ein anderes Fenster wo man die Webcam wählen muss und wenn ich dann auf OK drücke kommt nur ein schwarzes Fenster!! Bitte helft mir.

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Declaring Variables

    [/autoit] [autoit][/autoit] [autoit]

    $WM_CAP_START = 0x400
    $WM_CAP_UNICODE_START = $WM_CAP_START +100
    $WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
    $WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
    $WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
    $WM_CAP_ABORT = $WM_CAP_START + 69
    $WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
    $WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
    $WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
    $WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
    $WM_CAP_DRIVER_CONNECT = $WM_CAP_START + 10
    $WM_CAP_DRIVER_DISCONNECT = $WM_CAP_START + 11
    $WM_CAP_DRIVER_GET_CAPS = $WM_CAP_START + 14
    $WM_CAP_DRIVER_GET_NAMEA = $WM_CAP_START + 12
    $WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
    $WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
    $WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
    $WM_CAP_EDIT_COPY = $WM_CAP_START + 30
    $WM_CAP_END = $WM_CAP_UNICODE_END
    $WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
    $WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
    $WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
    $WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
    $WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
    $WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
    $WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
    $WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
    $WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
    $WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
    $WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
    $WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
    $WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
    $WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
    $WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
    $WM_CAP_GET_STATUS = $WM_CAP_START + 54
    $WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
    $WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
    $WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
    $WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
    $WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
    $WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
    $WM_CAP_PAL_OPENA = $WM_CAP_START + 80
    $WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
    $WM_CAP_PAL_PASTE = $WM_CAP_START + 82
    $WM_CAP_SEQUENCE = $WM_CAP_START + 62
    $WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
    $WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
    $WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
    $WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
    $WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
    $WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
    $WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
    $WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
    $WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
    $WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
    $WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
    $WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
    $WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
    $WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
    $WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
    $WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
    $WM_CAP_SET_SCALE = $WM_CAP_START + 53
    $WM_CAP_SET_SCROLL = $WM_CAP_START + 55
    $WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
    $WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
    $WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
    $WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
    $WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
    $WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
    $WM_CAP_STOP = $WM_CAP_START + 68
    $cap = ""
    $avi = ""
    $user = ""
    $snapfile = @ScriptDir & "\snapshot.bmp"

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ##########################################################
    ;~ Function Name : _WebcamInit()
    ;~ Description : Starts the webcam image capturing session
    ;~ Author : L|M|TER
    ;~ ##########################################################

    [/autoit] [autoit][/autoit] [autoit]

    Func _WebcamInit()
    $avi = DllOpen("avicap32.dll")
    $user = DllOpen("user32.dll")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ##########################################################
    ;~ Function Name : _Webcam($gui,$h,$w,$l,$t)
    ;~ Description : Creates a webcam preview window
    ;~ Parameter(s):
    ;~ $gui - The gui where the webcam window should be created
    ;~ $h - The height of the webcam window
    ;~ $w - The width of the webcam window
    ;~ $l - The left position of the webcam window
    ;~ $t - The top position of the webcam window
    ;~ NOTE : All parameters required !
    ;~ Author : L|M|TER
    ;~ ##########################################################

    [/autoit] [autoit][/autoit] [autoit]

    Func _Webcam($gui,$w,$h,$l,$t)
    $cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", $l, "int", $t, "int", $w, "int", $h, "hwnd", $gui, "int", 1)

    [/autoit] [autoit][/autoit] [autoit]

    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ##########################################################
    ;~ Function Name : _WebcamStop()
    ;~ Description : Closes the webcam image capturing session
    ;~ Author : L|M|TER
    ;~ ##########################################################

    [/autoit] [autoit][/autoit] [autoit]

    Func _WebcamStop()
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_END, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
    DllClose($user)
    DllClose($avi)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ##########################################################
    ;~ Function Name : _WebcamSnapShot($file)
    ;~ Description : Takes a snapshot
    ;~ Parameter(s):
    ;~ $file (Optional) - The path to the file where the snapshot will be saved (Default : @ScriptDir & "\snapshot.bmp")
    ;~ Author : L|M|TER
    ;~ ##########################################################

    [/autoit] [autoit][/autoit] [autoit]

    Func _WebcamSnapShot($file = $snapfile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $file)
    EndFunc

    [/autoit]
    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <Webcam.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $gui = GUICreate("Webcam UDF Test",640,480)
    _WebcamInit()
    _Webcam($gui,640,480,0,0)
    GUISetState(@SW_SHOW)
    Sleep(2000)
    ConsoleWrite("Taking snapshot ..." & @CRLF)
    _WebcamSnapShot()
    ConsoleWrite("Snapshot taken !" & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then
    _WebcamStop()
    Exit
    EndIf
    Sleep(1)
    WEnd

    [/autoit]

    Danke im Vorraus

  • Also bei mir kommt das Problem nicht. Hast zu zwei Webcams am Rechner angeschlossen? Evtl. gibt es dadurch dann Probleme.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Also ich habe das jetzt mal ausprobiert, und er macht mir nur ein grünes Fenster + Screenshot!

  • Das Probelem habe ich auch.
    Wenn ich das Programm nach 2Tagen starte funktioniert es super! Danach installt Windows einen Treiber, danach kann man das Progg 2Tage oder so nicht mehr benutzen :thumbdown: kA why..

    Nur keine Hektik - das Leben ist stressig genug

  • Weil es unterschiedliche Betriebssysteme gibt.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.