Page 1 sur 1
[..] Changer un paramètre en cours de traitement
Posté : jeu. 27 févr. 2014 11:56
par jpascal
Bonjour,
J'ai créé un script qui lance un ping.
Le programme demande s'il faut ou non une alerte sonore avec une GUI au démarrage
J'ai rajouté cette option dans le menu de la Tray.
Lorsque je lance le traitement, fonction Go() dans mon script, l'activation ou désactivation du son par l'option de la Tray ne fonctionne pas. Idem pour le menu Quitter (ExitLoop).
J'ai bien activé l'option "GUIOnEventMode".
Est-ce qu'Auto-It! permet ce genre de chose ou la fonction une fois lancée est-elle exclusive sur le clic dans le menu de la Tray ?
► Afficher le texte
Code : Tout sélectionner
...
$hCheckbox_Sound = GUICtrlCreateCheckbox("Alerte sonore", $nPosX, 90, 150, 25)
GUICtrlSetOnEvent(-1, "GUISoundConfig")
...
$hButton = GUICtrlCreateButton("Surveiller", $nWidthForm / 2 - $nWidthButton / 2, 150, $nWidthButton, 25)
GUICtrlSetOnEvent(-1, "Ping")
...
While 1
Switch TrayGetMsg()
Case 0
ContinueLoop
Case $item_Sound
If $Sound = 1 Then
$Sound = 0
Else
$Sound = 1
EndIf
SoundConfig()
Case $item_Exit
ExitLoop
EndSwitch
;Sleep(100) ; Sleep to reduce CPU usage
WEnd
Re: [..] Changer un paramètre en cours de traitement
Posté : jeu. 27 févr. 2014 12:52
par jguinch
Avec juste ce morceau de script, c'est difficile de t'aider...
Que contient la fonction Go() ?
Petite remarque concernant la ligne suivante :
GUICtrlSetOnEvent(-1, "Ping") : la fonction Ping() existe déjà, tu dois l'appeler autrement
Re: [..] Changer un paramètre en cours de traitement
Posté : jeu. 27 févr. 2014 14:39
par jpascal
Bonjour jguinch,
Merci de ta réponse.
En fait, j'ai remplacé. Ce n'est pas Ping mais Go qu'il faut lire.
La fonction contient ce code en résumé :
► Afficher le texte
Code : Tout sélectionner
Func Go()
While 1
$sResult = Ping($sIP)
écrire la valeur du ping dans un fichier
si pas de ping, afficher un tip dans la tray et jouer un son si $Sound = 1
WEnd
Sleep(10000)
Endfunc
Re: [..] Changer un paramètre en cours de traitement
Posté : jeu. 27 févr. 2014 15:31
par jguinch
OK, donc c'est normal...
Ta boucle principale s'occupe de récupérer les évènements du tray (TrayGetMsg). Mais dans cette boucle, tu fais appel à la fonction Go() qui elle-même contient une deuxième boucle (infinie ?) et une pause (Sleep) : donc tant que le programme exécute la fonction Go(), il ne peut pas récupérer les événements...
La reprise de la boucle principale ne se fera que lorsque la fonction Go() se terminera.
C'est l'inconvénient, de cette façon on ne peut pas gérer les événements + utiliser des fonctions bloquantes (comme ta fonction Go() )
Par contre, si tu nous explique un peu mieux le but de ton script (notamment la partie Ping), on pourra t'aiguiller.
@mikell :
@jpascal : pense à utilise la balise Spoiler pour le code (je l'ai ajouté dans ton premier post)
Re: [..] Changer un paramètre en cours de traitement
Posté : jeu. 27 févr. 2014 15:39
par mikell
Dans ta fonction Go tu as une boucle While et un Sleep, les 2 sont bloquants
Tu pourrais essayer avec TrayOnEventMode de commander un booléen global pour faire une fonction genre
► Afficher le texte
Code : Tout sélectionner
Func Go()
While 1
If $ok = 1 Then Return
$sResult = Ping($sIP)
écrire la valeur du ping dans un fichier
si pas de ping, afficher un tip dans la tray et jouer un son si $Sound = 1
WEnd
For $i = 1 to 100000
If $ok = 1 Then ExitLoop
Sleep(100)
Next
Endfunc
Edit
Yo jguinch, on a posté ensemble
Edit2
De toute façon le Sleep de 10 secondes est un mauvais plan, préférer AdLibRegister("Go", 10000)
Re: [..] Changer un paramètre en cours de traitement
Posté : mar. 04 mars 2014 14:56
par jpascal
Bonjour,
Et bien que d'infos intéressantes. Merci à vous deux.
- Le While... WEnd et le Sleep sont bloquant
- Il existe TrayOnEventMode. Je ne connaissais que le GUIOnEventMode.
- AdlibRegister() permet de s'affranchir du Sleep
Je n'ai pas vraiment compris le dernier code mais je vais essayer de mettre tous ces conseils à profit.
Le but de mon script est simple. Je veux loguer des valeurs de ping en ayant des alertes sonores lorsque ça ne "ping pas" et pouvoir les désactiver en cliquant sur un élément du menu de la "Tray".
Je reviens vers vous dès que possible.