Je cherchais a notifier la présence d'un nouveau fichier dans dossier.
un copieur fax d'un de mes clients transforme les fax en fichier PDF et les déposes dans un dossier
le vieux programme de mon client en windows 2003 ne fonctionne plus en windows 2008 64 bit
Aprés avoir cherché sur le net j'ai rien de trouvé de probant donc devinez ce que j'ai fait dans mon weekend !!
voila aprés quelques recherche sur ce forum je me suis inspiré d'un script de jerome pour le tray ( je n'arrive pas a retrouvé le post ) et Tlem indiquait dans un post un UDF qui avait des fonctions qui m'intéressait
Merci a eux
lien pour télécharger udf http://www.autoitscript.com/forum/topic ... nitor-udf/
et je vous donne mon code ci-dessous
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=fax.ico
#AutoIt3Wrapper_Outfile=surveille dossier.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=Utilitaire de JL56
#AutoIt3Wrapper_Res_Description=surveille les nouveaux fichier d'un dossier
#AutoIt3Wrapper_Res_Language=1036
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListviewConstants.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <FileSystemMonitor.au3>
#include <Constants.au3>
#include <Misc.au3>
#include <WinAPI.au3>
If _Singleton("test", 1) = 0 Then
;~ Msgbox(0,"Warning","An occurence of test is already running")
Exit
EndIf
$file = FileOpen(@ScriptDir & "\surveille dossier.ini", 0)
; test de l'ouverture du fichier de parametre
If $file = -1 Then
FileClose($file)
$file = FileOpen(@ScriptDir & "\surveille dossier.ini", 2)
FileWriteLine(@ScriptDir & "\surveille dossier.ini", "; Paramétrage de la surveillance d'un dossier")
FileWriteLine(@ScriptDir & "\surveille dossier.ini", "; par JL56")
FileWriteLine(@ScriptDir & "\surveille dossier.ini", "")
FileWriteLine(@ScriptDir & "\surveille dossier.ini", ";Lors d'un nouveau fichier, affiche une boite de dialogue pour le lire ou ouvrir le dossier")
FileWriteLine(@ScriptDir & "\surveille dossier.ini", ";et/ou joue un son")
FileWriteLine(@ScriptDir & "\surveille dossier.ini", "")
FileClose($file)
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "chemin dossier a surveiller", "")
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "delai affichage notification", 10)
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "son actif o/n", "o")
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "chemin fichier son", @ScriptDir & "\notify.wav")
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "Affichage actif o/n", "o")
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "type de fichier", "FAX")
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "dernier fichier", "")
EndIf
FileClose($file)
Global $dossier = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "chemin dossier a surveiller", "")
Global $delai = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "delai affichage notification", 10) * 30
Global $son = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "son actif o/n", "o")
Global $fichierson = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "chemin fichier son", @ScriptDir & "\notify.wav")
Global $affichage = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "Affichage actif o/n", "o")
Global $type_fichier = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "type de fichier", "FAX")
Global $dernierfichier = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "dernier fichier", "")
;~ FileInstall("F:\pi\forum\surveillance de dossier\logopi.jpg", @ScriptDir & "\logopi.jpg", 1)
;~ FileInstall("F:\pi\forum\surveillance de dossier\notify.wav", @ScriptDir & "\notify.wav", 1)
Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 1)
$settingsitem = TrayCreateMenu("Réglages disponibles")
$opt1item = TrayCreateItem("Son activé", $settingsitem)
TrayItemSetOnEvent(-1, "Option_1")
$opt2item = TrayCreateItem("Affichage activé", $settingsitem)
TrayItemSetOnEvent(-1, "Option_2")
$opt3item = TrayCreateItem("Ouvrir le fichier de paramétrage", $settingsitem)
TrayItemSetOnEvent(-1, "Option_3")
TrayCreateItem("")
$dernieritem = TrayCreateItem("Lire le dernier fichier")
TrayItemSetOnEvent(-1, "lirefichier")
$ouvriritem = TrayCreateItem("Ouvrir le dossier")
TrayItemSetOnEvent(-1, "ouvrir")
TrayCreateItem("")
$aboutitem = TrayCreateItem("A propos")
TrayItemSetOnEvent(-1, "A_propos")
TrayCreateItem("")
$exititem = TrayCreateItem("Quitter")
TrayItemSetOnEvent(-1, "Quitter")
TraySetState()
If $son = "o" Then TrayItemSetState($opt1item, $TRAY_CHECKED)
If $affichage = "o" Then TrayItemSetState($opt2item, $TRAY_CHECKED)
_FileSysMonSetup(3, $dossier, "")
While 1
_FileSysMonDirEventHandler()
Sleep(5000)
WEnd
Func Option_1()
If BitAND(TrayItemGetState($opt1item), $TRAY_CHECKED) Then
$son = "o"
Else
$son = "n"
EndIf
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "son actif o/n", $son)
EndFunc ;==>Option_1
Func Option_2()
If BitAND(TrayItemGetState($opt2item), $TRAY_CHECKED) Then
$affichage = "o"
Else
$affichage = "n"
EndIf
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "Affichage actif o/n", $affichage)
EndFunc ;==>Option_2
Func Option_3()
TrayItemSetState($opt3item, $TRAY_UNCHECKED) ; pas besoin de voir cette entrée sélectionnée
If FileExists(@ScriptDir & "\surveille dossier.ini") Then
ShellExecuteWait(@ScriptDir & "\surveille dossier.ini")
Sleep(100)
Global $dossier = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "chemin dossier a surveiller", "")
$delai = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "delai affichage notification", 10) * 30
$son = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "son actif o/n", "o")
$fichierson = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "chemin fichier son", @ScriptDir & "\notify.wav")
$affichage = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "Affichage actif o/n", "o")
$type_fichier = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "type de fichier", "FAX")
$dernierfichier = IniRead(@ScriptDir & "\surveille dossier.ini", "parametres", "dernier fichier", "")
If $son = "o" Then TrayItemSetState($opt1item, $TRAY_CHECKED)
If $affichage = "o" Then TrayItemSetState($opt2item, $TRAY_CHECKED)
EndIf
EndFunc ;==>Option_3
Func A_propos()
TrayItemSetState($aboutitem, $TRAY_UNCHECKED) ; pas besoin de voir cette entrée sélectionnée
MsgBox(0, "Logiciel de jl56 pour ses clients", "Surveille la présence d'un nouveau fichier dans un dossier," & _
@CRLF & "et vous en informe par une boite de dialogue et/ou un son" , 30)
EndFunc ;==>A_propos
Func ouvrir()
TrayItemSetState($ouvriritem, $TRAY_UNCHECKED) ; pas besoin de voir cette entrée sélectionnée
Run("explorer " & $dossier)
EndFunc ;==>ouvrir
Func lirefichier()
TrayItemSetState($dernieritem, $TRAY_UNCHECKED) ; pas besoin de voir cette entrée sélectionnée
If $dernierfichier <> "" Then
If FileExists($dossier & "\" & $dernierfichier) Then
ShellExecute($dossier & "\" & $dernierfichier)
Else
MsgBox(0, "Erreur", "Le fichier " & $dernierfichier & @CRLF & "n'est plus présent dans le dossier", 20)
EndIf
Else
MsgBox(0, "Erreur", "Il n'y a pas de fichier présent dans le dossier", 20)
EndIf
EndFunc ;==>lirefichier
Func Quitter()
Exit
EndFunc ;==>Quitter
Func _FileSysMonActionEvent($event_type, $event_id, $event_value)
Local $event_type_name
Local $fs_event = ObjCreate("Scripting.Dictionary")
Switch $event_type
Case 0
$fs_event.item(Hex(0x00000001)) = "file added to the directory|FILE_ACTION_ADDED"
EndSwitch
If StringLen($fs_event.item(Hex($event_id))) > 0 Then
$dernierfichier = $event_value
IniWrite(@ScriptDir & "\surveille dossier.ini", "parametres", "dernier fichier", $dernierfichier)
notification()
EndIf
EndFunc ;==>_FileSysMonActionEvent
Func notification()
If $son = "o" Then
If $fichierson <> "" And FileExists($fichierson) Then
SoundPlay($fichierson)
Else
_WinAPI_MessageBeep(2)
EndIf
EndIf
If $affichage = "o" Then
Global $Form1 = GUICreate("Information", 556, 187, 192, 124)
GUISetBkColor(0x00FFFF)
Global $bt_lire = GUICtrlCreateButton("Lire le fichier", 24, 92, 249, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x00FF00)
Global $bt_ouvrir = GUICtrlCreateButton("Ouvrir le dossier", 24, 132, 249, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFFFF00)
;~ Global $Pic1 = GUICtrlCreatePic(@ScriptDir & "\logopi.jpg", 300, 72, 233, 101)
Global $Label1 = GUICtrlCreateLabel("Vous venez de recevoir un nouveau fichier " & $type_fichier, 10, 20, 555, 33)
GUICtrlSetFont(-1, 16, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
; boucle *************************************
$boucle = 0
Do
$boucle = $boucle + 1
$msg = GUIGetMsg()
If $msg = $bt_ouvrir Then
ouvrir()
ExitLoop
EndIf
If $msg = $bt_lire Then
lirefichier()
ExitLoop
EndIf
Sleep(10)
Until $msg = $GUI_EVENT_CLOSE Or $boucle > $delai
GUIDelete()
EndIf
EndFunc ;==>notification