[..] Fonction AdLibRegister

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
jpbon
Niveau 2
Niveau 2
Messages : 23
Enregistré le : lun. 06 févr. 2012 15:26
Status : Hors ligne

[..] Fonction AdLibRegister

#1

Message par jpbon »

Bonjour,

J'avais demandé de l'aide il y a quelque temps sur la possibilité de stopper un script lorsqu'un dossier arrive à une taille égale à zéro.

Voici le code que l'on m'avait proposer de mettre dans mon script.

Code : Tout sélectionner

;vérifie toutes les 500ms, sans bloquer le script :

AdLibRegister("_verification", 500) ; à mettre en début de script

Func _verification()
    If FileGetSize(\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.NSF") = 0 Then
    MsgBox (0, "", "Envoi Terminé") ; 
    EndIf
    EndFunc  
 
Je n'avais pas tester la fonction, car elle me semblait simple et sans problème.
Malheureusement aujourd'hui, j'ai voulu tester et ça ne fonctionne pas.
Je pense que c'est peut être dû au fait que le chemin de mon dossier comporte un espace ( entre Local et Folder).
Je voudrais essayer de refaire un test mais je ne peux pas modifier le nom du dossier (Local Folder) aussi je me dis qu'il y a peut être un caractère qui peut être mis en lieu et place de cet espace dans la commande.
Savez-vous me dire si mon problème est bien celui que je pense avoir identifié et si il existe un symbole pouvant remplacer l'espace dans ce chemin ?
Merci pour votre aide précieuse.

Excellente soirée.
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#2

Message par DimVar »

Bonjour,



Vous pouvez déjà rajouter une double quote au début de la chaine. Et éventuellement, préciser le disque.

Ex :

Code : Tout sélectionner

If FileGetSize("c:\users\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.NSF") = 0 Then


Cdlt.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
jpbon
Niveau 2
Niveau 2
Messages : 23
Enregistré le : lun. 06 févr. 2012 15:26
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#3

Message par jpbon »

Bonjour,

Indiquer la lettre du support (e:\ ou f:\ ou ...) je ne pourrais pas le faire car il s'agit d'une clé USB et elle peut avoir une lettre différente en fonction de ce qui est déjà connecté sur le PC. Comme le dossier à vérifier au niveau de sa taille est également sur la même clé je pense et j'espère que l'absence de cette indication ne devrait pas être bloquante.

Je vais tester avec les " "
Dans tout les cas merci beaucoup pour votre aide.
Excellente journée.
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#4

Message par DimVar »

Bonjour,
jpbon a écrit : Indiquer la lettre du support (e:\ ou f:\ ou ...) je ne pourrais pas le faire car il s'agit d'une clé USB et elle peut avoir une lettre différente en fonction de ce qui est déjà connecté sur le PC.
Certes, mais comment voulez vous que FileGetSize s'y retrouve ?
Cherchez alors à repérer votre clef usb autrement. (en y mettant un fichier caractéristique à la racine par exemple)


Cdlt.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#5

Message par jguinch »

Juste une remarque, d'après le premier post, le but est "de stopper un script lorsqu'un dossier arrive à une taille égale à zéro". Dans ton script, tu utilises FileGetSize qui permet de récupérer la taille d'un fichier, pas d'un dossier.

Sinon, pour l'espace il n'y a aucun problème :

Code : Tout sélectionner

If FileGetSize("\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.NSF") = 0 Then Exit
Il faudrait que tu vérifies que le chemin est bien valide, par exemple en testant la présence du fichier :

Code : Tout sélectionner

If NOT FileExists("\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.NSF") Then Exit MsgBox(16, "", "Le fichier n'existe pas")
 
@Dimvar : moi j'avais compris que le script était sur la même clé... je me trompe certainement.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#6

Message par DimVar »

jguinch a écrit : @Dimvar : moi j'avais compris que le script était sur la même clé... je me trompe certainement.
Effectivement, si le script est sur la clef....
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
jpbon
Niveau 2
Niveau 2
Messages : 23
Enregistré le : lun. 06 févr. 2012 15:26
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#7

Message par jpbon »

Bonjour à tous,
Merci pour votre intérêt à mon problème.
Tout d'abord, je peux confirmer que le script est sur la clé USB ou se situe le fichier à vérifier au niveau de la taille.
Le fichier s'appelle : UNSENT MESSAGES.NSF il s'agit du fichier ou sont stockés les messages (mails) en attente d'envoi.
Le script a donc pour mission d'envoyer ces mails et de s'arrêter une fois que la taille de UNSENT MESSAGES.NSF est arrivé à zéro en affichant toutefois un message (Par exemple: Tout vos messages ont correctement été envoyés), on clic sur OK et c'est fini.
Je suis au travail et je ne peux pas tester la première suggestion de double "" "" à placer de chaque coté du chemin vers Unsent...
Ceci me permettrait de vérifier si ça suffit pour que ça fonctionne. J'essais de faire un test dès que possible et je vous confirme le résultat.

Bonne après midi et encore merci.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#8

Message par mikell »

Gahh ! les double-quotes c'est les guillemets, les simple-quotes les apostrophes ^^
Avant tout le test de reconnaissance de chemin proposé par jguinch est la 1ère chose à faire
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
jpbon
Niveau 2
Niveau 2
Messages : 23
Enregistré le : lun. 06 févr. 2012 15:26
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#9

Message par jpbon »

Bonjour,

J'ai testé hier soir et le résultat n'est pas celui attendu.
Le message "envoi terminé" apparait dès le début de l'envoi alors que le fichier UNSENT MESSAGES.NSF n'est pas vide.
Voici le code que j'ai mis. Pouvez-vous vérifier que je n'ai pas fais d'erreur de syntaxe ?

Code : Tout sélectionner

AdLibRegister("_verification", 500) ; à mettre en début de script

    Func _verification()
    If FileGetSize("\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.msf") = 0 Then
    MsgBox (0, "", "Envoi Terminé") ;
    EndIf
    EndFunc
Si le fichier n'est pas trouvé, peut être que c'est pour cette raison que le message apparait tout de suite ?
Une fois l'envoi terminé, je ne suis pas certain que le fichier UNSENT MESSAGES.msf arrive à zéro, il garde une valeur proche de 4 octets je
suppose que je peux dans ce cas simplement modifier la valeur = 0 Then à = 4 Then, cette valeur correspond bien à un nombre d'octet ?
Merci pour vos suggestions sur l'ensemble de ce sujet, Excellente journée.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#10

Message par mikell »

"Failure: Returns 0 "
Tester : @scriptdir & "\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.msf"
Et quand ça marchera vaudra mieux mettre < 5 plutôt que = 4
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#11

Message par jguinch »

Le fait qu'il te retourne 0 est dû au fait que le fichier n'a pas été trouvé.
Est-ce que tu as essayé FileExists pour tester si le fichier est bien trouvé ?
Tu devrais commencer par tester avec le chemin complet, puis supprimer le lecteur pour trouver où ça coince.

Sinon pour la taille, il faut que tu détermines la valeur minimale de ton fichier :

Code : Tout sélectionner

$taille = 5 ; en octets
If FileGetSize("\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.msf") < $taille Then ...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Dkstorisateur
Niveau 1
Niveau 1
Messages : 8
Enregistré le : ven. 09 déc. 2011 11:30
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#12

Message par Dkstorisateur »

Bonjour,

pour moi il y a une erreur dans ta fonction. Le FileGetSize ne reçoit pas un chemin complet il ne sait pas si le dossier est sur F: ou autre.
Voici une solution possible.

Code : Tout sélectionner

AdLibRegister("_verification", 500) ; à mettre en début de script

Func _verification() 

$lettre = stringleft(@ScriptDir,1)

    If FileGetSize($lettre & ":\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.msf") <= 5 Then
          MsgBox (0, "", "Envoi Terminé") ;
    EndIf
 EndFunc
 
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Usa
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#13

Message par TopXm »

Hello :)
Dkstorisateur a écrit : Le FileGetSize ne reçoit pas un chemin complet il ne sait pas si le dossier est sur F: ou autre.
Euh pas tout à fait d'accord, par défaut il prendra le lecteur en cours, du coup le script de jguinch devrait fonctionner.

Exemple avec un script sur C: (ou est installé Windows)

Code : Tout sélectionner

MsgBox(0, '', FileGetSize('\pagefile.sys'))
++
jpbon
Niveau 2
Niveau 2
Messages : 23
Enregistré le : lun. 06 févr. 2012 15:26
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#14

Message par jpbon »

Bonjour à tous,

Je suis un peu en retard par rapport à vos derniers messages, toutefois pendant le week end, j'ai testé la vérification du chemin pour voir si il me trouve bien le fichier.
Avec la commande If Not FileExists .... il ne trouve rien (il m'indique "Le fichier n'existe pas".
J'ai essayé aussi avec : If NOT WinExists et le résultat est le même "Le fichier n'existe pas".

Je suppose donc qu'il faut d'abord solutionner ce point.
Si vous voulez tester de votre coté, voici les éléments de mon application.
J'utilise une version portable de Thunderbird et mon script actuel est le suivant :

Code : Tout sélectionner

;Script AutoIt réalisé par JPBON
Global $n = 0


While 1
$valeur = InputBox("Saisir votre mot de passe", "Attention vous êtes sur le point de lancer la Finalisation ce qui declenchera l'envoi des messages prepare par Mr XXX. ", "", " M11")
If $valeur = "12345" Then
    MsgBox(32, "Mot de passe correct", "Cliquer maintenant sur OK pour envoyer les messages de Mr XXX. ")
    ExitLoop
ElseIf @error = 1 Then
    MsgBox(64,"Exit","Vous avez choisi de quitter le programme")
    Exit
Else
    $n += 1
    MsgBox(16, "Attention", "Mot de passe invalide, vous n'avez droit qu'a 5 tentatives")
EndIf
If $n = 5 Then
    MsgBox(16, "Fin du programme", "Nombre maximun d'essais atteint, le programme va se fermer")
    Exit
EndIf
WEnd

ShellExecuteWait("http://www.leavemytrace.com")
Sleep (20000) ; On attend 15 secondes avant de fermer la page web
WinClose ("Leave My Trace - Mozilla Firefox", "")
WinClose ("Leave My Trace - Windows Internet Explorer", "")
;WinClose ("Leave My Trace - Windows Chrome", "") ; à vérifier

Sleep (2000)

If Not WinExists ("Folder Parain", "") Then
RunWait ("Ouverture.bat")
EndIf
Sleep (2000)
;MsgBox("","ATTENTION : Lancement de la Finalisation", "Saisir dans la fenetre (Folder Parain) le code indiqué sur la page Web precedemmenbt affichee LeavMyTrace. Cliquer ensuite sur Entree et enfin sur le bouton OK de cette boite de dialogue")

If NOT  WinExists("\Finalisation\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.msf","") Then
    MsgBox(16, "", "Le fichier n'exist pas")
    EndIf
    
;Si la fenetre Mozilla Thunderbird n'est pas deja ouverte, on en ouvre une :
If Not WinExists ("Messages en attente - Mozilla Thunderbird", "") Then
Run ("Parain\Transmission.exe")
EndIf
;On vérifie que la fenêtre Mozilla Thunderbird est bien active
WinWaitActive ( "Messages en attente - Mozilla Thunderbird" )
    ;vérifie toutes les 500ms, sans bloquer le script :

Sleep (3000) ; On attend 3 secondes avant de simuler l'appui sur les touches suivantes
; On lance la commande d'envoi des messages en attente
Send ("!f") ; !f = Alt+F
Sleep (500) ; On attend une demi seconde avant de simuler l'appui sur la touche suivante
Send ("a") ; On simule un appui sur la touche (a) qui correspond à la commande (envoyer les messages en attente)

ProgressOn("Progression de la transmission", "", "0 pourcent", 100, 200, 16)
Global $Progress1 = GUICtrlCreateProgress(16, 32, 262, 20)
Global $Label2 = GUICtrlCreateLabel("0 pourcent", 15, 60, 100, 20)

For $xyz = 1 to 100 step 1
    sleep(600) ; cette valeur va afficher un curseur avec une progression sur 60 secondes
        ; Pour une progression de 10 minutes, mettre la valeur sleep(6000)
    ProgressSet( $xyz, $xyz & " pourcent")
    Next
    
    
    ;AdLibRegister("_verification", 5000) ; à mettre en début de script

    ;Func _verification()
    ;If FileGetSize("\\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.msf") <= 10 Then
    ;MsgBox (16, "Vérification", "La boite est vide") ;
    ;EndIf
    ;EndFunc
    
ProgressSet(100 , "Messages transmis")
sleep(5000)
ProgressOff()
Sleep (1000)
;On ferme Mozilla Thunderbird
WinClose ("Messages en attente - Mozilla Thunderbird", "")
;On affiche un message de fin
MsgBox (0, "Finalisation Terminée" , "Félicitations, les messages de Mr xxxx ont bien été envoyés")
Sleep ("3000")

Exit
 
Dans ce code on fait appel à un autre fichier (ouverture.bat) c'est juste une script qui permet de montrer ou cacher le répertoire Finalisation\Parain....

Je recherche également une autre solution de contrôle qui consisterait à trouver l'information du nombre de messages enregistré dans Thunderbird (portable) et de récupérer cette donnée pour pouvoir indiquer X messages sont à transmettre et faire un décompte au fur et à mesure que les messages sont envoyés. Mais ça c'est une autre Histoire.

Merci pour votre aide, excellente journée à tous.

Jean-Pierre
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#15

Message par jguinch »

Salut.
WinExits n'a rien à voir avec FileExits !

Si le code If NOT FileExists("\Finalisation\Parain\Data\profile\Mail\Local Folders\UNSENT MESSAGES.msf") Then MsgBox(16, "", "Le fichier n'exist pas") te dit que le fichier n'existe pas, ça veut dire que soit il n'existe pas, soit il n'est pas accessible. Donc c'est quasiment sûr que le chemin n'est pas bon.
Est-ce que tu as essayé de mettre le chemin exact pour tester (ce serait un bon début) ? (ex x:\Finalisation\....).
Est-ce que tu es bien sûr que le fichier "UNSENT MESSAGES.msf" se trouve bien sur la clé.
Tu peux éventuellement nous faire un ZIP de l'arborescence et nous l''envoyer...

Pour ta question par rapport à l'information du nombre de messages enregistrés, ça risque d'être un peu compliqué...
Thunderbird stocke les mails dans des fichiers au format MBOX, qui sont des fichiers à peu près lisibles : jusque là, c'est assez simple. Le problème est dans le compactage des mails : un mail supprimé reste présent dans le fichier MBOX, il est marqué comme supprimé dans le fichier MBOX, dans le flag X-Mozilla-Status2. Il n'est réellement supprimé du fichier MBOX que lorsque le compactage est effectué (qui peut être automatique ou non).
Donc pour connaître le nombre de mails présents dans un dossier (Envoyés ou autre), il faudra compter le nombre d’occurrences de X-Mozilla-Status2, et vérifier chaque valeur (qui correspond au status du mail).

D'ailleurs, es-tu sûr que c'est bien le fichier .msf qui contient les mails ? En général, les mails sont stockés dans des fichiers sans extension.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
jpbon
Niveau 2
Niveau 2
Messages : 23
Enregistré le : lun. 06 févr. 2012 15:26
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#16

Message par jpbon »

Bonjour,

Voici en pièce jointe une copie d'écran du chemin.

Merci
Fichiers joints
Doc1.docx
Chemin
(158.65 Kio) Téléchargé 55 fois
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#17

Message par jguinch »

OK, donc le chemin à l'air bon.
Si tu exécutes le code ci-dessous, ça donne quoi ?

Code : Tout sélectionner

If FileExists("E:\Finalisation\Parain\Data\profile\Mail\Local folders\Unsent Messages.msf") Then MsgBox(0,"OK", "OK avec le chemin complet")
If FileExists("\Finalisation\Parain\Data\profile\Mail\Local folders\Unsent Messages.msf") Then MsgBox(0,"OK", "OK avec le chemin relatif")
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
jpbon
Niveau 2
Niveau 2
Messages : 23
Enregistré le : lun. 06 févr. 2012 15:26
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#18

Message par jpbon »

Je viens de tester, ça me met OK avec le chemin complet et OK avec le chemin relatif.

Je viens aussi de vérifier la taille du fichier UNSEND MESSAGES.msf et il fait seulement 5,69Ko avec 4 messages et 1 petite pièce jointe de 50.8Ko. J'ai saisi de nouveaux messages avec pièces jointe et le fichier n'a pratiquement pas grossi, 5.71Ko.
Je pense donc que ce fichier n'est peut être qu'une liste des messages mais ils ne contient pas réellement les messages. Dans le même dossier il y a aussi un autre fichier qui fait 11 159Ko et qui s'appelle Unsend MESSAGES apparemment sans extension.
Pour valider que c'est bien ce fichier qu'il faudrait tchéquer, j'ai vérifier sa taille après la saisie des nouveaux messages et il est passé à
11 771Ko ce qui semble correspondre à l'augmentation de taille de mes nouveaux messages.
Si mon raisonnement est juste, comment vérifier la taille de ce fichier (sans extension, enfin peut être ???) et qu'il n'y ai pas de confusion avec celui qui possède une extension. msf ?
ça devient compliqué mon histoire, et je suis pas sûr d'être sur la bonne voie. Peut être faut il chercher différemment une autre solution.

Dans tout les cas merci pour votre aide.

Jean-Pierre
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#19

Message par mikell »

Pas de problème FileGetSize fonctionne avec un fichier sans extension (sans confusion)
Ce qui semble être le cas pour ton Unsend MESSAGES : ton screenshot montre 'type de fichier = Fichier'
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Fonction AdLibRegister

#20

Message par jguinch »

Le fichier "Unsend Messages", sans extension correspond au dossier "Messages en attente" de TB. C'est donc bien ce fichier qu'il faut regarder.
Même si le dossier est vide dans TB, le fichier ne sera pas vide pour autant. Pour ça, il faudra passer par le compactage des dossiers (Fichier, compacter les dossiers) avant et après l'envoi. Par contre, ça aussi ça risque d'être la galère en fonction de la version de TB.
Est-ce que tu as plusieurs versions, plusieurs machines ou est-ce que c'est limité à une seule ? (quelle version ?)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre