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

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
K4rl3oN
Niveau 2
Niveau 2
Messages : 16
Enregistré le : mer. 20 avr. 2011 15:42
Status : Hors ligne

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

#1

Message 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
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#2

Message par timmalos »

Merci pour le partage !
K4rl3oN
Niveau 2
Niveau 2
Messages : 16
Enregistré le : mer. 20 avr. 2011 15:42
Status : Hors ligne

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

#3

Message par K4rl3oN »

c'était un plaisir :D
fatcom2006
Niveau 1
Niveau 1
Messages : 1
Enregistré le : ven. 26 juil. 2013 12:34
Status : Hors ligne

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

#4

Message 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]
Répondre