Pourquoi ne pas pouvoir surveiller les modifications d'un dossier ?
[Je, tu, ils... sont parano]
Cet UDF répond simplement à cette question: miaintenant OUI !
Une fois correctement configuré, il appellera une fonction
callback à chaque:
- Création
- Suppression
- Modification
- Changement de nom
de n'importe quel fichier ou dossier à l'intérieur de celui configuré (oui, oui, c'est récursif !
)
2 modes sont possibles:
- Attente d'un évenement
La fonction d'attente est appelé une unique fois et appellera la callback dès qu'un unique évènement se produira
- Surveillance continue
Un thread est lancé et appellera la callback autant de fois qu'il le faudra !
Miais un bon exemple est surement plus efficace qu'un long
et potentiellement chiant discours !
► Afficher le texteexemple
Code : Tout sélectionner
#include "RepMonitor.au3"
; Configuration:
; On va surveiller mon bureau...
RMonitor_SetFolder("C:\Users\Jon\Desktop\")
; ...en appelant _TestCalback à chaque évènement
RMonitor_SetCallback("_TestCallback")
; ### EXEMPLE 1: Attente d'un évènement ###
While 1
; La boucle est interrompue à chaque attente
RMonitor_WaitForEvents()
WEnd
; ### EXEMPLE 2: Surveillance continue ###
RMonitor_StartMonitoring()
While 1
; La boucle est continue
WEnd
RMonitor_StopMonitoring()
; Notre callback favorite:
; Un seul argument de type wstr
; Prototype C:
; void _TestCallback(const wchar_t MSG);
; void _TestCallback(LPCWSTR MSG); (en WINAPI)
Func _TestCallback($MSG)
; 1er caractère = ID de l'évènement
Local $EventID = StringLeft($MSG, 1), _
$CompletePath = "C:\Users\Jon\" & StringTrimLeft($MSG, 1)
; Reste = Chemin RELATIF du dossier|fichier
Static $OldName
Switch ($EventID)
Case $FILE_ACTION_ADDED
ConsoleWrite("Ajout: " & $CompletePath & @CRLF)
Case $FILE_ACTION_REMOVED
ConsoleWrite("Suppression: " & $CompletePath & @CRLF)
Case $FILE_ACTION_MODIFIED
ConsoleWrite("Modification: " & $CompletePath & @CRLF)
Case $FILE_ACTION_RENAMED_OLD_NAME
$OldName = $CompletePath
Case $FILE_ACTION_RENAMED_NEW_NAME
ConsoleWrite("Renommé: " & $OldName & " en " & $CompletePath & @CRLF)
EndSwitch
EndFunc
Toute la demiarche étant gérée par la DLL, pas besoin de se préoccuper du pourquoi du comment !
(Techniquement parlant (pour les fadas du C), c'est du bon pointeur sur fonction le tout dans un thread
)
NB:
La DLL à été codée par mes soins, donc aucun danger à ce niveau là !
Il existe plusieurs explications à ce que l'on appelle le sens de la vie:
- H2G2 nous dit 42
- Les Monthy Python font des bulles
- Tyler Durden nous parle de savonnette à la soude...
A mon humble avis, chacun le sien !
[blink]NYA ![/blink] >^.^<