[Ex] Capture image webcam simple, leger et sans GUI
Posté : mer. 30 oct. 2013 02:14
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)
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)

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