Page 1 sur 1

[..] Optimisation script, il est lent a se fermer

Posté : jeu. 28 mai 2009 19:33
par xeno
Hello

Cela fait deux jours que je me suis lancé dans autoit, je commence mon premier
scripts, et j'ai un petit soucis de lenteur, alors qu'il n'est pas fini.

il est très lent à se fermer ou a se mettre en pause.
étant débutant je suis ouvert a toutes suggestions et corrigé des erreurs aussi,
mais taper pas trop dur quand même c'est mon premier :P

pour le descriptif de son usage, il me permet d'automatiser certaines tâches répétitives
sur winrar et xtremsplit par exemple

► Afficher le textetext

Re: [..] Optimisation script, il est lent a se fermer

Posté : jeu. 28 mai 2009 19:41
par Iste
Je te conseil d'utiliser la fonction Hotkeyset() au lieu de _IsPressed()

Pour se faire, place juste au début de ton script

Code : Tout sélectionner

HotKeySet("{F12}","pause")
(faudra aussi revoir la fonction pause() du coup)

Sinon, la fonction Call() et plutot faite pour appeler une fonction dont on ne connait pas le nom a l'execution du script

Code : Tout sélectionner

createbox1()
scan2()
marche tres bien aussi ;)

Edit : la lenteur vient de tout les If Winexists, faudrait revoir ca :/ je vais y jetter un coup d'oeil

Re: [..] Optimisation script, il est lent a se fermer

Posté : jeu. 28 mai 2009 20:29
par xeno
j'ai testé un

hotkeyset("{Esc}","quitter")

et là cela quitte rapidement,

pour la lenteur c'est depuis que j'ai rajouter des If que cela c'est ralenti, c'est sûr.
pour winrar par exemple j'ai pris en compte si c'est une version french ou English, les titres
ne sont pas les mêmes.

Mais j'ai pas réussir a faire différemment. j'ai tenter d'autres méthode mais sans succès :oops:

Re: [..] Optimisation script, il est lent a se fermer

Posté : jeu. 28 mai 2009 21:49
par Tlem
Pour la création de votre script, vous vous êtes inspiré de l'exemple fournit pour la fonction GUICreate, ce qui est tout à votre honneur car cela prouve que vous avez lut la documentation.
Cela dit, cet exemple n'est pas des plus adapté à votre cas, car lui il traite un seul cas, alors que vous, vous en traité plusieurs (ce qui ralentit la gestion des différents événements graphique).

En réalité, un boucle de message classique ressemble à ceci :

Code : Tout sélectionner

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd
Pour les puristes, je fait abstraction du mode événement car il est généralement utilisé lorsque l'on à une grande quantité de cas (graphique) à gérer.

Pour vous donner quelques explications sur ce type de boucle, nous allons commencer par la première ligne.
While 1 Cette commande associée à la commande Wend va nous permettre de créer une boucle infinie. While 1 signifiant : Tant Que 1 (condition qui restera toujours vraie).

Ensuite, à l'intérieur de cette boucle, nous récupérons dans la variable $nMsg la valeur de GUIGetMsg (qui regarde les différents messages
renvoyés par l'interface graphique).

Puis, nous utilisons une commande qui va permettre de diriger le déroulement du code vers le cas approprié (cas renvoyé par GUIGetMsg).
Switch et Case sont donc les commandes qui vont nous permettre de faire cela.
Dans l'exemple que je vous ai donné, Case $GUI_EVENT_CLOSE est le cas ou vous fermé la fenêtre GUI et donc le traitement est : Exit (pour sortir du code).
Voilà pour la partie boucle d'attente.

Ensuite, toujours dans votre script, vous placez tout vos codes dans des fonctions (comme dans l'exemple). Sachez que ceci n'est pas obligatoire.
C'est une bonne habitude pour du code qui doit être exécuté plusieurs fois dans le script, ou qui doit être appelé par plusieurs commandes différentes, sinon c'est plus déstabilisant qu'autre chose.

Jetez un oeil par ici pour voir comment créer un script classique.

Pensez à associé la partie principale de votre code à la touche 'Start'.
Pour la partie de test du mot de passe, je pense qu'il est possible d'optimiser.

Pour le reste, je n'ai pas trop regardé, mais voyez si par hasard il n'est pas possible de scripter les commandes plutôt que de jouer avec la partie graphique qui du jour au lendemain peut changer. ;)

Re: [..] Optimisation script, il est lent a se fermer

Posté : jeu. 28 mai 2009 22:04
par Iste
Apres reflexion, je pense que le mieux serait d'utiliser le mode evenementiel (que je ne sais pas utiliser ^^')

Code : Tout sélectionner

opt("GUIOnEventMode",1)
GUICtrlSetOnEvent ($bouton, "fonction")
Et de rajouter un bon gros sleep de 100ms dans la boucle. Ca devrait devenir tres légé ^^ et assez rapide.
Peut etre aussi que d'utiliser la fonction WinList() et de faire une recherche manuel pourrait etre plus rapide

Je vais essayer de faire un bout de code exemple ce soir !

Edit : Voila, je ne peux pas tester le code d'ou je suis, mais l'idée est la !
► Afficher le texte

Re: [..] Optimisation script, il est lent a se fermer

Posté : jeu. 28 mai 2009 23:02
par xeno
@Tlem

j'ai déjà jeté un oeil :P , pour le start, disons que je voulais que cela démarre aussitot avec possibilité
d'une pause, d'ou le start. (je suis un peu fainéant autant m'éviter un clic pour lancer l'appli :roll: )

j'ai bien essayé les case select et switch mais ça partait en live, et cliquait tout seul n'importe ou :oops:

Re: [..] Optimisation script, il est lent a se fermer

Posté : jeu. 28 mai 2009 23:08
par xeno
@Iste

je vais assimilé ça et tester, et je reviens, peut être pas ce soir, en attendant merci....