[UDF] RMonitor: surveillance d'un dossier

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
mano78170
Niveau 3
Niveau 3
Messages : 43
Enregistré le : dim. 10 oct. 2010 13:28
Localisation : Entre chez moi et la salle info du lycée
Contact :
Status : Hors ligne

[UDF] RMonitor: surveillance d'un dossier

#1

Message par mano78170 » mer. 22 mai 2013 20:42

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 ! 8) )

:arrow: 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
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 :mrgreen: )

NB:
La DLL à été codée par mes soins, donc aucun danger à ce niveau là !
Fichiers joints
[UDF]RMonitor.zip
(5.95 Kio) Téléchargé 246 fois
[UDF]RMonitor.zip
(5.95 Kio) Téléchargé 246 fois
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] >^.^<

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11325
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#2

Message par Tlem » mer. 22 mai 2013 20:55

Bonsoir et merci du partage.
Pour info, il existe une version qui utilise les API Windows et donc sans DLL (Full AutoIt) ici : http://www.autoitscript.com/forum/topic ... onitor-udf
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Avatar du membre
mano78170
Niveau 3
Niveau 3
Messages : 43
Enregistré le : dim. 10 oct. 2010 13:28
Localisation : Entre chez moi et la salle info du lycée
Contact :
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#3

Message par mano78170 » mer. 22 mai 2013 21:06

Merci pour l'info, j'avais déjà testé cet UDF, qui, à mia grande déception ne semble pas fonctionner à tout les coups :(
Il utilise effectivement la même fonction que moi (ReadDirectoryChangeW) miais ne permet pas le multithreading :wink:
(Concept assez dur à implémenter proprement en 100% AutoIt)
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] >^.^<

Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 983
Enregistré le : lun. 19 oct. 2009 03:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#4

Message par matwachich » jeu. 23 mai 2013 01:27

Je pense que la différence avec l'UDF WinAPI est la récursivité (je peux me tromper ...)
Sinon, est-ce possible d'avoir le code de la DLL?
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici

Avatar du membre
mano78170
Niveau 3
Niveau 3
Messages : 43
Enregistré le : dim. 10 oct. 2010 13:28
Localisation : Entre chez moi et la salle info du lycée
Contact :
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#5

Message par mano78170 » jeu. 23 mai 2013 19:01

La récursivité n'est qu'un paramètre booléen à passer à ReadDirectoryChangesW :mrgreen:
(vous le trouverez d'ailleurs à la ligne 100 :D )

En ce qui concerne l'implémentation de cette fonction, rien de bien vraiment compliqué à l'exception du buffer de structure FILE_NOTIFY_INFORMATION
qui lui à été le véritable truc chiant embêtant (passé en temps que *DWORD[], y'a des fois on se demiande ce que les dev de chez MS ont
dans la tête :!: )
Fichiers joints
RMonitor DLL.zip
(3.29 Kio) Téléchargé 181 fois
RMonitor DLL.zip
(3.29 Kio) Téléchargé 181 fois
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] >^.^<

Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 983
Enregistré le : lun. 19 oct. 2009 03:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#6

Message par matwachich » dim. 26 mai 2013 21:19

Je suis d'accord à propos des dev de M$.
Merci beaucoup pour le code, et le projet CB!
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici

Avatar du membre
mano78170
Niveau 3
Niveau 3
Messages : 43
Enregistré le : dim. 10 oct. 2010 13:28
Localisation : Entre chez moi et la salle info du lycée
Contact :
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#7

Message par mano78170 » lun. 27 mai 2013 20:02

Quand un dev trouve une bonne idée, il n'y a aucune raison pour qu'il la garde pour lui seul ! :mrgreen:
En d'autre termes, je soutient l'open source :D

De plus, il est évident que cette DLL n'est pas parfaite ! Et c'est en partageant son code qu'elle le deviendra (hypothétiquement) un jour ! :lol:
Je demiande juste que si quelqu'un souhaite réutiliser ce code, il me cite en tant qu'auteur (juste pour le swag d'avoir codé un truc un peu utile pour changer :roll:)

Au fait, pour ceux qui souhaiteraient obtenir un DllMain 'propre' (pas un DllMain@12 quoi), il suffit de passer le param -Wl,--kill-at au linker ! 8)
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] >^.^<

Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 983
Enregistré le : lun. 19 oct. 2009 03:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#8

Message par matwachich » mar. 28 mai 2013 00:52

Quand j'aurai un peu de temps, je compte modifier votre code pour pouvoir surveiller plusieurs dossiers, configurer la récursivité ...
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici

Cautex
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 05 juin 2012 17:24
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#9

Message par Cautex » mar. 20 août 2013 16:27

Bonjour,

Merci pour cet udf mais chez moi il ne fonctionne que partiellement:
1. la partie "; ### EXEMPLE 2: Surveillance continue ###" plante à chaque fois;
2. pour l'exemple 1, tout marche sauf la détection de fichier modifié ou la fonction "_TestCallback($MSG)" n'est pas appelée .

EDIT: j'ai testé le "FileSystemMonitor UDF" et il ne retourne pas non plus la modification de fichier chez moi.

Avatar du membre
mano78170
Niveau 3
Niveau 3
Messages : 43
Enregistré le : dim. 10 oct. 2010 13:28
Localisation : Entre chez moi et la salle info du lycée
Contact :
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#10

Message par mano78170 » mer. 21 août 2013 01:43

Bonjour, :)

Il est possible que mon UDF loupe effectivement de façon occasionnel certains events, les modifications entre autre car elles peuvent être générées en nombre dans un cour laps de temps, ce qui suffit à provoquer un buffer overload au sein de la dll et donc en zapper quelques unes. Après, ce système se basant uniquement sur la WinAPI, il est possible que l'os ne hook pas absolument TOUT les events...

Concernant le crash du second exemple, c'est la première fois que l'on signale un tel bug, aussi je ne peux que vous rappeler que les appels des fonctions RMonitor_SetFolder et RMonitor_SetCallback sont à effectuer impérativement avant de déclencher le monitoring (et ceux dans les 2 cas).
Vous disposez également du code complet de la DLL (quelques messages plus haut) si vous souhaitez "tester/titiller" les fonctions C.

En cas de bugfix, je vous serais reconnaissant de poster le code mis à jour. 8)
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] >^.^<

Deathmask04
Niveau 1
Niveau 1
Messages : 1
Enregistré le : mer. 30 mars 2016 11:40
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#11

Message par Deathmask04 » lun. 16 mai 2016 09:57

Bonjour,

J'ai un petit problème lorsque je scan un répertoire via un lecteur réseau en utilisant la fonction RMonitor_StartMonitoring(), si le lecteur réseau devient inaccessible, mon programme plante (AutoIt3exe ended.rc:-1073741819)

Avez vous une solution ?

Avatar du membre
mano78170
Niveau 3
Niveau 3
Messages : 43
Enregistré le : dim. 10 oct. 2010 13:28
Localisation : Entre chez moi et la salle info du lycée
Contact :
Status : Hors ligne

Re: [UDF] RMonitor: surveillance d'un dossier

#12

Message par mano78170 » mer. 18 mai 2016 00:05

Bonjour,

Cela fait un bon moment que je n'ai pas fais d'AutoIt (majoritairement à cause de ma conversion vers le monde merveilleux de Linux).
Cependant si vous avez quelques connaissances en C (et potentiellement WinAPI), vous pouvez télécharger le code source de ma DLL
(disponible à ce post: http://www.autoitscript.fr/forum/viewto ... c14#p78138)
En cas de patch/fix je vous demande juste de partager vos sources sur ce thread (et/ou sur tout autre site) en me citant en tant qu'auteur dans le code.

Si vous avez une question sur le code ou autre, je reste disponible par MP.
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] >^.^<

Répondre