Page 1 sur 1

[Ex] Capture image webcam simple, leger et sans GUI

Posté : mer. 30 oct. 2013 02:14
par K4rl3oN
Bonjour à tous,
Voilà une petite contribution au forum de ma part, j'ai eu le besoin de créer un script me permettant de prendre des captures à partir d'une webcam sans pour autant créer une interface graphique et inclure les fameux WindowsConstants.au3 et GUIConstants.au3, je me suis pencher sur Webcam.au3 et après quelques manipulations voici le résultat: un code le plus bref et compacte que possible (7 lignes sans compter les tests) 8)

Code : Tout sélectionner

;~_Webcam_Snap() affiche la capture et retourne True en cas de réussite ou un False en cas d'echec

;~$Capture = @ScriptDir&"\"&@YEAR&@MON&@MDAY&@HOUR&@MIN&@SEC&".bmp"
_Webcam_Snap(@ScriptDir&"\"&@YEAR&@MON&@MDAY&@HOUR&@MIN&@SEC&".bmp")
Func _Webcam_Snap($nom_cap)
  Local $ret = False
  $avi = DllOpen("avicap32.dll")
  If $avi <> -1 Then
;~  $Main = WinGetHandle(WinGetTitle(""))
    $cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "", "int", 1610612736, "int", 0, "int", 0, "int", 0, "int", 0, "hwnd", WinGetHandle(WinGetTitle("")), "int", 1)
    If @error = 0 Then
        $user = DllOpen("user32.dll")
        If $user <> -1 Then
            DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", 0x400+10, "int", 0, "int", 0)
            If @error = 0 Then
                DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", 0x400+25, "int", 0, "str", $nom_cap)
                If @error=0 And FileExists($nom_cap) And FileGetSize($nom_cap)>0 Then
                    $ret = True
                    ShellExecute($nom_cap)
                EndIf
            EndIf
            DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", 0x400+181, "int", 0, "int", 0)
            DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", 0x400+11, "int", 0, "int", 0)
        EndIf
    EndIf
DllClose($user)  
DllClose($avi)
  EndIf
  Return $ret
EndFunc

Re: [Ex] Capture image webcam simple, leger et sans GUI

Posté : mer. 30 oct. 2013 13:58
par timmalos
Merci pour le partage !

Re: [Ex] Capture image webcam simple, leger et sans GUI

Posté : mer. 30 oct. 2013 15:36
par K4rl3oN
c'était un plaisir :D

Re: [Ex] Capture image webcam simple, leger et sans GUI

Posté : lun. 24 mars 2014 11:28
par fatcom2006
tout d'abord merci pour le partage :D.... j'ai apporté une petite modification .

Code : Tout sélectionner

[spoiler=]    _Webcam_Snap(@ScriptDir&"\"&@YEAR&@MON&@MDAY&@HOUR&@MIN&@SEC&".bmp")
    
    
Func _Webcam_Snap($nom_cap)
      Local $ret = False
      $avi = DllOpen("avicap32.dll")
      If $avi <> -1 Then
    ;~  $Main = WinGetHandle(WinGetTitle(""))
        $cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "", "int", 1610612736, "int", 0, "int", 0, "int", 0, "int", 0, "hwnd", WinGetHandle(WinGetTitle("")), "int", 1)
        If @error = 0 Then
            $user = DllOpen("user32.dll")
            If $user <> -1 Then
                DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", 0x400+10, "int", 0, "int", 0)
                If @error = 0 Then
                    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", 0x400+25, "int", 0, "str", $nom_cap)
                    If @error=0 And FileExists($nom_cap) And FileGetSize($nom_cap)>0 Then
                        $ret = True
                     ;~ ShellExecute($nom_cap) [color=#FF0000]
                     Else
                        FileDelete($nom_cap)[/color]
                    EndIf
                EndIf
                DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", 0x400+181, "int", 0, "int", 0)
                DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", 0x400+11, "int", 0, "int", 0)
            EndIf
        EndIf
    DllClose($user) 
    DllClose($avi)
      EndIf
      Return $ret
EndFunc[/spoiler]