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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#1

Message 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  
Modifié en dernier par Boulanza le jeu. 31 déc. 2020 14:53, modifié 1 fois.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#2

Message 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.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#3

Message 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.
Répondre