Page 1 sur 1
[R] Lancer une commande à la fin d'une vidéo
Posté : dim. 13 déc. 2009 17:32
par pierrotm777
Bonjour,
J'ai trouvé sur les forum autoit une fonction qui me permet de lire une vidéo dans une fenêtre.
► Afficher le texte
Code : Tout sélectionner
#include <DSEngine.au3>
Func _Avi()
; Create GUI as usual
$SplashFiles = "video.avi"
; $hWnd=GUICreate("Test video",800,600 )
$hWnd = GUICreate("video",800,600,0,0,$WS_POPUP, $WS_EX_TOPMOST)
GUISetState()
$Annuler = GUICtrlCreateButton("QUIT", 700, 550, 100, 50)
GUICtrlSetTip(-1, "Exit the Program !")
; WinSetTrans ($hWnd, '', $Transparency)
; Opens the dll and create a interface to the engine
Engine_Startup("DSEngine_UDF.dll")
; Loads a media file (this will also load the necesary filters)
Engine_LoadFile($SplashFiles,$hWnd)
;test if the video is finished
$AviLengh = Engine_GetLength()
$AviPosition = Engine_GetPosition()
; Starts the playback
Engine_StartPlayback()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $Annuler
SplashTextOn("Exit Program", "You skip the " & _
"video application !!!", 250, 80, $WidthSWF/3, $HeightSWF/2.5, 0, "", 12, 800)
Sleep(3000)
GUIDelete($hWnd)
Engine_Shutdown()
LaunchAppli()
Exit
EndSwitch
WEnd
EndFunc
Mon problem est que si je clic sur le bouton "quit", ma vidéo s'arrête bien et la commande LaunchAppli() lance bien une commande que je définie dans
un fichier ini .
Mais si je laisse la vidéo aller jusqu'à la fin , alors la commande LaunchAppli() n'est pas lancée.
Je pense avoir trouvé dans l'include DSEngine.au3 les fonctions Engine_GetLength() qui donne la longueur de la vidéo et Engine_GetPosition() la
position en cours de la vidéo.
Je me suis donc dis qu'en vérifiant si $AviPosition = $AviLengh , alors je pourrais aller à ma commande LaunchAppli() .
$AviLengh = Engine_GetLength()
$AviPosition = Engine_GetPosition()
Mais je ne trouve pas où placer ma boucle de test ni la formuler .
Je joinds la dll et les fichiers include .
Merci pour votre aide !
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : lun. 14 déc. 2009 00:17
par Tlem
Votre titre est très étrange : Lancer une comme à la fin d'une vidéo
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : lun. 14 déc. 2009 11:40
par pierrotm777
Tlem a écrit :Votre titre est très étrange : Lancer une comme à la fin d'une vidéo
Oui , c'est bien mon problème .
La fonction que j'ai trouvé permet de lire une vidéo dans une fenêtre à partir de commandes DirectShow .
Hors , j'ai créé un petit fichier .avi de 10s pour tester la fonction et si je laisse la vidéo se dérouler jusqu'au bout, mon programme reste sur la vidéo sans lancer ma commande alors que ma commande est bien lancée si je la stoppe avant la fin .
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : lun. 14 déc. 2009 15:36
par ani
il est vrai que le titre ne veut trop rien dire ^^' mais le comme < doit etre com
enfin passont, alors dasn la votre boucle while indiquer ceux-ci.
Code : Tout sélectionner
while 1
If $AviLengh then LaunchAppli()
$msg = GUIGetMsg()
case ...
...
wend
ou dans une case else
Code : Tout sélectionner
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $Annuler
......
case else
If Avilenght then
[le code]
EndSwitch
WEnd
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : lun. 14 déc. 2009 16:17
par pierrotm777
Merci de votre aide , je n'étais pas loin , j'avias bien tenté un case mais mal écrit .
Je teste de suite
Merci encore .
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : lun. 14 déc. 2009 16:23
par pierrotm777
Alors voici ma modification de la boucle avec avec pour choix la deuxième solution:
Pour l'instant , j'ai commenté le lancement de mon application, mais je devrais voir mon message uniquement là pour l'essaie , mais non , rien aprés la fin de la vidéo ne se passe !
► Afficher le texte
Code : Tout sélectionner
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $Annuler
SplashTextOn("Exit Program", "You skip the " & _
"video application !!!", 250, 80, $WidthSWF/3, $HeightSWF/2.5, 0, "", 12, 800)
Sleep(3000)
GUIDelete($hWnd)
Engine_Shutdown()
LaunchAppli()
Exit
Case Else
If $AviPosition = $AviLengh Then
; Engine_Shutdown()
; LaunchAppli()
MsgBox(0,"Longueur video","La vidéo est finie")
Exit
EndIf
EndSwitch
WEnd
Je viens d'essayer cela, et cette fois ci il croit que la vidéo est finie et sort de suite:
► Afficher le texte
Code : Tout sélectionner
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $Annuler
SplashTextOn("Exit Program", "You skip the " & _
"video application !!!", 250, 80, $WidthSWF/3, $HeightSWF/2.5, 0, "", 12, 800)
Sleep(3000)
GUIDelete($hWnd)
Engine_Shutdown()
LaunchAppli()
Exit
Case Else
If $AviLengh Then
; GUIDelete($hWnd)
; Engine_Shutdown()
; LaunchAppli()
MsgBox(0,"Longueur video","La vidéo est finie")
Exit
EndIf
EndSwitch
WEnd
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : lun. 14 déc. 2009 21:50
par Tlem
@pierrotm777
Je vous ai déjà expliqué qu'il est inutile de citer le message qui précède le votre.
Merci d'éditer vos deux message précédent afin de supprimer la citation.
Merci.
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : mar. 15 déc. 2009 06:56
par pierrotm777
Désolé , c'est une mauvaise habitude .
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : mer. 16 déc. 2009 06:10
par pierrotm777
Si quelqu'un pouvais me donner un conseil svp malgté mes mauvaises habitudes ?
Re: [..] Lancer une comme à la fin d'une vidéo
Posté : mer. 16 déc. 2009 08:43
par Tlem
Vous avez mis au début du script :
$AviLengh = Engine_GetLength()
Donc la variable $AviLengh doit contenir la longueur de la vidéo.
Il vous suffit de contrôler régulièrement avec
Engine_GetPosition() si vous n'êtes pas à la fin de la vidéo et voilà.
Genre :
Vous devez évidement placer ce code au bon endroit dans votre boucle
While.

Re: [..] Lancer une comme à la fin d'une vidéo
Posté : mer. 16 déc. 2009 08:58
par pierrotm777
Merci Tlem de votre aide, cela fonctionne comme je le voulais.
Pour info , voici ma modification!
► Afficher le texte
Code : Tout sélectionner
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $Annuler
SplashTextOn("Exit Program", "You skip the " & _
"video application !!!", 250, 80, $WidthSWF/3, $HeightSWF/2.5, 0, "", 12, 800)
Sleep(3000)
GUIDelete($hWnd)
Engine_Shutdown()
LaunchAppli()
Exit
Case Else
If Engine_GetPosition() >= $AviLengh Then
GUIDelete($hWnd)
Engine_Shutdown()
LaunchAppli()
Exit
EndIf
EndSwitch
WEnd
Franchement , je n'était pas loin , je pensais que un test sur = suffirait !
Merci encore