Webcam.au3 unter Win7

  • Hallo Com,
    ich habe mir einmal dieses Beispielsscript von autoBert angesehen [Beispiel] SnapShot's from WebCam ver.: 0.8.1.3 .
    Dabei ist mir aufgefallen, dass die Webcambilder bei mir nur nach jedem Start von Windows 1x angezeigt werden; danach kommt nur noch ein schwarzes Bild.
    Habe jetzt bei mehreren Leuten gelesen, dass es Probleme mit dieser Udf-Sammlung auf WIn7 gibt. Weiß jemand wie diese zu lösen sind, bzw. wie das Script unter Win7 immer funktioniert und nicht nach jedem Neustart des Computers?
    Für mich sieht es so aus, als ob irgendwelche DInge betrefflich der Webcam nicht heruntergefahren werden und diese dann Komplikationen verursachen, die nach jedem Neustart heruntergefahren werden.
    Die in dem verlinkten Thread beschriebene Lösung mit _Singelton funktioniert leider nicht bei mir, habe das Script genauso verwendet wie dort gepostet.
    Habe leider keinerlei Lösungsansatz für dieses Problem und hoffe, dass ihr mir helfen könnt.

    Im Prinzip ist das das gleiche Problem wie hier beschrieben: [ offen ] Webcam.au3 fehler bei Windows 7 x32/x64
    Nur das ich darauf noch keine Lösung habe.

    Win7, Cpu:X64 Os:X86

    Viele Grüße und Dank im Vorraus,
    stayawayknight

    2 Mal editiert, zuletzt von stayawayknight (14. Januar 2011 um 19:35)

  • Im Prinzip funktioniert die UDF ja unter Win7 - Bei mir aufjedenfall :D .
    Nur das Win automatisch sich einen putten Treiber sucht und das Programm dann so erst wieder nach ein paar Tagen starten lässt.
    Also müsste man nur den Treiber löschen und es würde wieder funktionieren, oder etwa nicht?

    Nur keine Hektik - das Leben ist stressig genug

  • Edit: So, hab eine Lösung gefunden die gut funktioniert, einzigster Nachteil ist, dass die Meldung bezüglich der Kamera weiterhin erscheint - beim Abbrechen o.ä. wird jedoch dann die Kamera ausgeführt.

    Script
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: autoBert http://www.autoit.de/index.php?page…2937#post182937
    based on http://www.autoitscript.com/forum/index.ph…ndpost&p=572154

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

    Script Function:
    Demo for Webcam Udf

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

    #ce ----------------------------------------------------------------------------
    #include 'webcam.au3'
    #include<GDIPlus.au3>
    #include <Misc.au3>
    #include<array.au3>

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

    $cam_xlength = 640;Breite
    $cam_ylength = 480 ;Höhe

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

    $sProgTitel = "SnapShot from WebCam"
    $sProgVer = "v 0.8.1.3"

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

    $capDir = @ScriptDir & "\captures"
    If Not FileExists($capDir) Then DirCreate($capDir)

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

    HotKeySet("{INSERT}", "SnapShot")

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

    If _Singleton($sProgTitel & $sProgVer, 1) = 0 Then
    WinActivate($sProgTitel & $sProgVer)
    Exit
    EndIf

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

    $gui = GUICreate($sProgTitel & $sProgVer, $cam_xlength, $cam_ylength + 20, 0, 0)

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

    $WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
    $label1 = GUICtrlCreateLabel("", 0, $cam_ylength + 5, $cam_xlength, 20)
    _GDIPlus_Startup()
    $WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
    GUISetState(@SW_SHOW)
    AdlibRegister("SnapShot", 10000)

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

    Do
    Until GUIGetMsg() = -3
    AdlibUnRegister("SnapShot")
    _WebcamClose($WebcamID)
    ConsoleWrite($WebcamID & @CRLF)
    _GDIPlus_Shutdown()

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

    Func SnapShot()
    $nr = 1
    While FileExists($capDir & "\Bild" & $nr & ".jpg")
    $nr += 1
    WEnd
    $oFile = $capDir & "\Bild.bmp"
    $nFile = $capDir & "\Bild" & $nr & ".jpg"
    If FileExists($oFile) Then FileDelete($oFile)
    _WebcamSnap($WebcamID, $oFile)

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

    Local $aDT = FileGetTime($oFile)
    $sInfo = $aDT[0] & "/" & $aDT[1] & "/" & $aDT[2] & " " & $aDT[3] & ":" & $aDT[4] & ":" & $aDT[5]
    ConsoleWrite($sInfo & @CRLF)

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

    $himg = _GDIPlus_ImageLoadFromFile($oFile)

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

    $hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
    $iX = _GDIPlus_ImageGetWidth($himg)
    $iy = _GDIPlus_ImageGetHeight($himg)
    $hBrush = _GDIPlus_BrushCreateSolid(); $Color)
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    $hFont = _GDIPlus_FontCreate($hFamily, 20, 2)
    $tLayout = _GDIPlus_RectFCreate($iX - 260, $iy - 30)
    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sInfo, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sInfo, $hFont, $aInfo[0], $hFormat, $hBrush)
    _GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
    _GDIPlus_ImageSaveToFile($himg, $nFile)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($himg)
    GUICtrlSetData($label1, $nr)
    FileDelete($oFile)
    EndFunc ;==>SnapShot

    [/autoit]

    Vielleicht kann ja auch autoBert damit etwas anfangen, werde es mal in dem entsprechenden Thread posten.

    Einmal editiert, zuletzt von stayawayknight (14. Januar 2011 um 19:39)

  • Ich habe mir das Skript WebCam.au3 mal angesehen, und es gibt zwei Dinge, die sich mir nicht erschließen:

    Func WebCamOpen:

    [autoit]

    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)

    [/autoit]
    Zitat von MSDN

    WM_CAP_SET_PREVIEWRATE
    wParam = (WPARAM) (wMS);
    lParam = 0L;
    wMS Rate, in milliseconds, at which new frames are captured and displayed.

    Func _WebcamClose:

    [autoit]

    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_END, "int", 0, "int", 0)

    [/autoit]
    Zitat von Definition
    [autoit]

    $WM_CAP_END = $WM_CAP_UNICODE_END
    $WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW

    [/autoit]
    Zitat von MSDN

    WM_CAP_PAL_SAVE
    wParam = (WPARAM) 0;
    lParam = (LPARAM) (LPVOID) (LPSTR) (szName);

    szName Pointer to a null-terminated string containing the palette filename.


    Vielleicht ist Win7 da etwas wählerischer als WinXP?