Page 1 sur 1

[R] Comment associer une boucle infinie au programme en cours d'exécution ?

Posté : jeu. 31 déc. 2020 11:31
par Boulanza
Bonjour tout le monde,
Je saisis cette occasion pour vous souhaiter une bonne et heureuse année 2021.
Comment faire pour ne pas perturber (bloquer) le fonctionnement normal d’un scripte en cours d’exécution.
Explication : J’ai programme Gui (Questionnaire) perso qui tourne en permanence. Dans le cadre dans le respect des règles de confidentialité et de protection des données. Pour cela, il est recommandé de fermer tout processus (intrus) ne figurant pas sur la liste des processus autorisés ProcessList(). Voici le code1 que j'utilise pour fermer processus non autorisé.
Problématique :
- Le code 1 marche sans problème s’il est lancé à part hors script du programme Gui (Questionnaire) perso.
- Si j’intègre (associe) le code 1 dans le script du programme Gui, toutes les commandes se bloquent (Boutons) suite à la présence de la boucle infinie.
Solution souhaitée :
Comment intégrer (associe) le code 1 dans le programme Gui ( à l'intérieur) sans perturber (bloquer) le fonctionnement normal de l’application qui est en cours d’exécution.
c.à.d. : Je souhaiterai que lorsque l'on clique sur annuler ou que l'on appuie sur "Bouton" ma boucle ne s’arrête pas mais elle ne bloque pas le fonctionnement normale du programme en cours d’exécution.
Meri infiniment pour votre aide.
Cordialement.

CODE 1:
#include <Array.au3>
Func _ProcessClose()
   While 1
      $begin = TimerInit()
      Sleep(3000)
      ProcessAutorises()
   WEnd
EndFunc   ;==>_ProcessClose2

Func ProcessAutorises() ; Par exemeple ceux du système et indispensable à l'éxecution du programme
   Global $aExcludeList[20] = [ _
         "[System Process]", _
         "avp", _
         "avpui", _
         "cmd", _
         "conhost", _
         "csrss", _
         "ctfmon", _
         "dwm", _
         "icp", _
         "SciTE Script Editor", _
         "SciTE", _
         "AutoIt3", _
         "SciTE", _
         "STC"]
   Global $aProcessList = ProcessList()
   For $iProcess = 1 To $aProcessList[0][0]
      If _ArraySearch($aExcludeList, StringLeft($aProcessList[$iProcess][0], StringInStr($aProcessList[$iProcess][0], ".", 0, -1) - 1)) = -1 Then
         ProcessClose($aProcessList[$iProcess][1])
      EndIf
   Next
EndFunc  

Re: [..] Comment associer une boucle infinie au programme en cours d'exécution ?

Posté : jeu. 31 déc. 2020 14:42
par walkson
Bonjour et bonnes fêtes de fin d'année
Si j'ai bien compris votre question, pour éviter la boucle while, il faut utiliser AdlibRegister ( "function" [, time = 250] ) et
AdlibUnRegister ( ["function"] ) pour stopper la fonction. Le reste du code continue à fonctionner.

Re: [..] Comment associer une boucle infinie au programme en cours d'exécution ?

Posté : jeu. 31 déc. 2020 14:52
par Boulanza
Bonjour walkson et bonnes fêtes de fin d'année pour vous aussi.
Merci pour votre réponse, c'est très concluant. Tout est dans l'aide AutoIt lien:
https://www.autoitscript.fr/autoit3/doc ... gister.htm
Cordialement.