Page 1 sur 1
[..] Surveiller l'arrivée de nouveau fichier dans un dossier
Posté : lun. 22 nov. 2010 17:47
par yannosh
Bonjour, je cherche a afficher une image en plein écran au moment ou elle est copié dans un dossier.
Aprés quelques recherches j'en suis la :
Code : Tout sélectionner
$dateplusrecent = 0
$fichierplusrecent = ""
FileChangeDir("D:\tofo")
$search = FileFindFirstFile("*.JPG")
If $search = -1 Then
SplashImageOn("Boo", "d:\tofo\1\error.JPG" ,@DesktopWidth ,@DesktopHeight , "", "", 1)
Sleep(2200)
EndIf
While 1
$file = FileFindNextFile($search)
$datefichier = FileGetTime($file,0,1)
if $datefichier > $dateplusrecent then
$dateplusrecent = $datefichier
$fichierplusrecent = $file
SplashImageOn("Boo", $fichierplusrecent ,100 ,200 , "", "", 1)
Sleep(2200)
EndIf
WEnd
Ca m'affiche bien toute les photos que j'ai dans le dossier mais si j'en rajoute une sans relancer le prog ca ne l'affiche pas.
Auriez vous une idée ?
Merci !
Re: [..] Surveiller l'arrivée de nouveau fichier dans un dossier
Posté : lun. 22 nov. 2010 18:09
par pop45
Alors dans ce cas le meilleur moyen serait de faire un Adlibenable qui verifirait s'il y a un nouveau fichier dans le dossier a l'aide de filefindfirstfile et filefindnextfile, quand vous affichez les image, vous pouvez poser leur nom dans une variable a 1 dimension (ex: "dim $image[25])
ou sinon, vous déplacez les image afficher dans un sous dossier afin qu'elles ne soit pas pris en compte par les fonction filefindfirstfile et filefindnextfile qui serait appelles par l'adlibenable
Re: [..] Surveiller l'arrivée de nouveau fichier dans un dossier
Posté : lun. 22 nov. 2010 19:51
par zeshrek
C'est normal qu'il detecte pas les nouveaux fichiers.
Rajoute un 'do' AVANT la ligne
$search = FileFindFirstFile("*.JPG")
et un 'loop' apres le wend final et ca devrait mieux se passer.
Si tu lui dis pas de scanner le répertoire de temps en temps, il reste sur son premier scan.
là, tu scanne, la première fois il t'affiche les photos, ensuite, il passera son temps a scanner et boucler en faisant rien, sauf si une nouvelle image arrive.
Met éventuellement une sortie par hotkey....
Re: [..] Surveiller l'arrivée de nouveau fichier dans un dossier
Posté : lun. 22 nov. 2010 21:49
par Tlem
Je pense qu'il serait plus judicieux d'utiliser un UDF déjà tout fait :
FileSystemMonitor
L'avantage de cet UDF est qu'il permet de surveiller complètement un dossier. Certes, la gestion est plus lourde qu'une simple boucle, mais sur le principe, ce sera plus évolutif et stable.
Pour simplifier l'utilisation de l'UDF, il vous suffit de surveiller l'apparition d'un nouveau fichier, ensuite de vérifier son extension et enfin de faire l'action désirée.
Regardez le fichier d'exemple afin de le simplifier.

Re: [..] Surveiller l'arrivée de nouveau fichier dans un dossier
Posté : lun. 29 nov. 2010 14:21
par yannosh
Bonjour,
merci a tous, je m'en suis sorti comme ca :
► Afficher le texte
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.0.0
Author: yann
Script Function:
slide soirée scripto.
#ce ----------------------------------------------------------------------------
;init des variables
$dateplusrecent = 0
$fichierplusrecent = ""
FileChangeDir("D:\tofo")
;liste des fichier au lancment
$search = FileFindFirstFile("*.JPG")
HotKeySet("²", "slide")
HotKeySet("{ESC}", "Terminate")
;;;; Body of program would go here ;;;;
While 1
Sleep(2000)
slide()
WEnd
Func slide()
;si pas de fichier trouvé, affiche image erreur
If $search = -1 Then
SplashImageOn("Boo", "d:\tofo\1\error.JPG" ,@DesktopWidth ,@DesktopHeight , "", "", 1)
Sleep(2200)
EndIf
$file = FileFindNextFile($search)
If @error Then
;MsgBox(0, "no photo", "clode")
FileClose($search)
Sleep(2200)
;MsgBox(0, "no photo", "reset")
$search = FileFindFirstFile("*.JPG")
$dateplusrecent = 0
EndIf
$datefichier = FileGetTime($file,0,1)
if $datefichier > $dateplusrecent then
$dateplusrecent = $datefichier
$fichierplusrecent = $file
SplashImageOn("Boo", $fichierplusrecent ,400 ,200 , "", "", 1)
Sleep(2200)
SplashOff()
EndIf
;MsgBox(0, "sortie", "while")
EndFunc
Func Terminate()
Exit 0
EndFunc
Ce que je voudrai faire maintenant , c'est afficher une image quand on viens de la rajouter.
En fait, on a un appareil photo qui envoie les photo dans un dossier, le but étant de faire défiler les images (ca , ca marche) mais au moment ou une photo arrive dans le dossier, l'afficher et revenir au slide ensuite ....
Je continu de chercher mais je dois avouer que je suis encore plus perdu que précédemment !
Re: [..] Surveiller l'arrivée de nouveau fichier dans un dossier
Posté : lun. 29 nov. 2010 15:25
par yannosh
c bon , c'est dans la poche, je donne le script au cas ou
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.0.0
Author: yann
Script Function:
slide soirée scripto.
#ce ----------------------------------------------------------------------------
;init des variables
$dateplusrecent = 0
$fichierplusrecent = ""
$last = ""
$nb = 0
FileChangeDir("D:\tofo")
;liste des fichier au lancment
$search = FileFindFirstFile("*.JPG")
HotKeySet("²", "slide")
HotKeySet("{ESC}", "Terminate")
;;;; Body of program would go here ;;;;
While 1
Sleep(2000)
slide()
WEnd
Func lastFile()
$last = $fichierplusrecent
$nb = StringMid($last, 5, 4)
;MsgBox(4096, $fichierplusrecent, "je save cette image et le chiffre "&$nb)
EndFunc
Func newImg()
If FileExists("D:\tofo\DSC_"&$nb+1&".JPG") Then
SplashImageOn("Boo", "D:\tofo\DSC_"&$nb+1&".JPG" ,1920 ,1275 , "", "", 1)
Sleep(2200)
;SplashOff()
$nb = $nb+1
EndIf
EndFunc
Func slide()
;si pas de fichier trouvé, affiche image erreur
If $search = -1 Then
SplashImageOn("Boo", "d:\tofo\1\error.JPG" ,@DesktopWidth ,@DesktopHeight , "", "", 1)
Sleep(2200)
EndIf
$file = FileFindNextFile($search)
If @error Then
;MsgBox(0, "no photo", "clode")
FileClose($search)
Sleep(2200)
;MsgBox(0, "no photo", "reset")
$search = FileFindFirstFile("*.JPG")
$dateplusrecent = 0
lastFile()
EndIf
$datefichier = FileGetTime($file,0,1)
if $datefichier > $dateplusrecent then
$dateplusrecent = $datefichier
$fichierplusrecent = $file
SplashImageOn("Boo", $fichierplusrecent ,1920 ,1275 , "", "", 1)
Sleep(2200)
;SplashOff()
newImg()
EndIf
;MsgBox(0, "sortie", "while")
EndFunc
Func Terminate()
Exit 0
EndFunc
Merci encore pour l'aide donnée plus haut

Re: [..] Surveiller l'arrivée de nouveau fichier dans un dossier
Posté : lun. 29 nov. 2010 16:16
par yannosh
ReBonjour
Une derniere ptite chose,
entre chaque splash on passe pas le bureau, est qu'il y a moyen de ne pas afficher le bureau entre chaque image ?
Merki !