Foire aux Questions (FAQ)

Cette section donne quelques unes des questions les plus fréquemment posées dans le forum.  Si vous ne pouvez pas trouver la réponse que vous cherchez ici, alors le forum doit être votre premier point d'appui.

Questions

1. Pourquoi mon vieux script v2.64 ne s'exécute pas en v3 ?

2. Est-ce que la v3 est beaucoup plus difficile que les précédentes versions ?

3. Comment convertir mes scripts v2.64 en v3 ?

4. Où est passée la commande "goto" ?

5. Comment puis-je exécuter un programme DOS depuis AutoIt ?

6. Pourquoi ne puis-je utiliser Run() que pour exécuter les fichiers .exe et .com ?  Qu'en est-il des .msi / .txt et autres ?

7. Pourquoi est-ce que je reçois des erreurs quand j'essaie d'utiliser les guillemets (") ?

8. Que signifient les paramètres de fenêtre "title" et "text" ?

9. Pourquoi ne puis-je afficher une variable en effectuant "Ma variable est $variable" ? ?

10. Quand j'utilise Send() pour envoyer une variable, il arrive des choses bizarres ?

11. Quelle est la différence entre la valeur return et @error ?

12. Comment sortir d'un script par un raccourci clavier ?

13. Comment utiliser une icône personnalisée quand je compile mes scripts ?

14. Comment puis-je être sûr qu'une seule copie de mon script est exécutée ?

15. Quelles sont les limites techniques actuelles d'AutoIt v3 ?

16. Je vois un symbole d'image absente dans le fichier d'aide, dans les exemples.

 

 

1. Pourquoi mon vieux script v2.64 ne s'exécute pas en v3 ?

v3 a une structure de langage différente de celle de v2.64.

Les versions précédentes d'AutoIt étaient parfaites pour ce à quoi elles étaient destinées - écrire de simples scripts pour aider à l'installation de logiciels.  Ensuite certains commencèrent à l'utiliser pour des tâches de scripts générales et compliquées.  Les anciennes syntaxe et structure rendaient cela possible mais très très difficile et volumineux.  La décision fut prise de rendre AutoIt plus adapté aux automatisations générales de tâches et réussir à créer un langage plus standard et plus dans le style du basic.  Cela signifie aussi que si vous connaissez déjà un langage de script, vous maîtriserez AutoIt v3 facilement.

 

Retour

2. Est-ce que la v3 est beaucoup plus difficile que les précédentes versions ?

Non.  En fait sur beaucoup de points, il est beaucoup plus facile que les versions précédentes car vous n'aurez pas à essayer de forcer le langage à faire ce à quoi il n'était pas destiné.   Il utilise également un langage familier dans le style du langage BASIC connu pour être... euh... basique :)

 

La grande majorité des anciens scripts étaient focalisés sur l'installation de logiciels et l'action de cliquer sur "Suivant" de nombreuses fois dans les boîtes de dialogue.  La plupart de ces scripts peuvent être convertis en v3 simplement en ajoutant quelques parenthèses ici ou là.  Voici un exemple d'un tel script en v2 et en v3 (simulant une installation avec quelques boîtes de dialogue qui ont un bouton Suivant et un bouton Terminer)

 

; Script en v2.64
WinWaitActive, Bienvenue, Bienvenue à l'installation de XSoft
Send, !n
WinWaitActive, Choix d'une destination, Choisissez
Send, !n
WinWaitActive, Prêt à installer, Cliquez Suivant pour installer
Send, !n
WinWaitActive, Installation Terminée, Cliquez Terminer pour finir
Send, !f
WinWaitClose, Installation Terminée

; Script en v3
WinWaitActive("Bienvenue", "Bienvenue à l'installation de XSoft")
Send("!n")
WinWaitActive("Choix d'une destination", "Choisissez")
Send("!n")
WinWaitActive("Prêt à installer", "Cliquez Suivant pour installer")
Send("!n")
WinWaitActive("Installation Terminée", "Cliquez Terminer pour finir")
Send("!f")
WinWaitClose("Installation Terminée")

 

Voila, ça n'était pas si mal ! :)  Comme toutes les "chaînes" de caractères sont incluses entre guillemets, vous n'avez pas à vous bagarrer davantage avec les problèmes d'espacements dans le texte.  Il existe également un formidable support pour de nombreux éditeurs de texte de telle façon que, quand vous écrivez des scripts v3, vous pouvez voir la syntaxe en surbrillance, ce qui rend tout ça beaucoup plus simple.

 

Retour

3. Comment convertir mes scripts v2.64 en v3 ?

La première chose à vous demander c'est "Ai-je besoin de convertir mon script ?".  La v2.64 est toujours téléchargeable et possède toujours son support, donc il n'est pas besoin de mettre à jour tous vos scripts - à moins que vous ne le vouliez absolument :)

 

Il y a une section du fichier d'aide qui indique la relation entre les commandes v2 et v3 - Cliquez ici pour voir la page.

 

Un des auteurs de AutoIt v3 a créé un utilitaire pour convertir automatiquement les scripts v2 en v3.  La conversion se fait très bien à moins que votre code ne soit un enchevêtrement de gotos :)  Vous pouvez trouver le convertisseur dans le dossier "Extras" (Démarrer \ AutoIt v3 \ Extras - Ou alors regardez le dossier dans lequel vous avez installé AutoIt v3).

 

Retour

4. Où est passée la commande "goto" ?

Partie.  C'est mauvais ?  Non, ne demander pourquoi, c'est comme ça.  It's C'est comme ce morceau de roche qu'ils trouvent dans le micro-ondes à la fin du film Time Bandits :) (Lien FR)

 

AutoIt v3 utilise les caractéristiques des "boucles" modernes, et ne nécessite donc plus l'utilisation de la commande Goto.  Regardez du coté de While, Do, For, ExitLoop, ContinueLoop et Functions la méthode moderne de faire les choses :)  Et tant que vous êtes à regarder dans l'aide, regardez aussi du coté de boucles, Instructions conditionelles et functions.  Je vous promets, qu'une fois que vous aurez compris le principe de telles choses,vous serez capable d'écrire des scripts dans pratiquement n'importe quel autre langage en quelques minutes.

 

Pour commencer, l'utilisation la plus basique de Goto dans la version 2.64 était une boucle infinie comme ceci :

:MonEtiquette
... Fait quelque chose ...
... Puis autre chose ...
Goto, MonEtiquette

Une version simplifiée de ceci en v3 est une boucle While toujours "vraie".

While 1 = 1
   ... Fait quelque chose ...
   ... Puis autre chose ...
Wend

 

Retour

5. Comment puis-je exécuter un programme DOS depuis AutoIt ?

Si vous voulez lancer quelque chose comme une commande DOS "Dir" alors vous devez le faire par l'interpréteur de commandes (command.com ou cmd.exe selon votre OS).  La macro @Comspec contient l'emplacement exact de ce fichier.  Vous devriez utiliser la fonction RunWait() qui attend la fin du programme DOS avant de passer à la ligne de script suivante.  Voici un exemple d'exécution de la commande DOS sur le disque C: (lançant effectivement la commande Command.com /c Dir C:\ )

    RunWait(@COMSPEC & " /c Dir C:\")

 

Retour

6. Pourquoi ne puis-je utiliser Run() que pour exécuter les fichiers .exe et .com ?  Qu'en est-il des .msi / .txt et autres ?

Seulement quelques extensions de fichiers sont habituellement "exécutable" - Ce sont les .exe, .bat, .com, .pif.  Les autres types de fichiers comme .txt et .msi sont actuellement exécutés avec un autre programme.  Lorsque vous double-cliquez sur un fichier "MonFichier.msi", c'est la commande "Msiexec.exe MonFichier.msi" qui est exécutée en arrière-plan.
Donc pour lancer un fichier .msi à partir d'AutoIt, vous devriez faire :

    RunWait("msiexec MonFichier.msi")

 

Ou, lancer la commande "Start" qui saura automatiquement comment exécuter le fichier pour vous :

    RunWait(@COMSPEC & " /c Start MonFichier.msi")

 

Ou encore, utiliser la fonction ShellExecuteWait qui saura automatiquement comment exécuter le fichier pour vous :

    ShellExecuteWait("myfile.msi")

 

Retour

7. Pourquoi est-ce que je reçois des erreurs quand j'essaie d'utiliser les guillemets (") ?

Si vous voulez utiliser des guillemets à l'intérieur d'une chaîne, alors vous devez "les doubler".  Donc pour chaque guillemet que vous voulez, vous devez en mettre deux.  Par exemple, si vous vouliez déclarer une variable avec la chaîne: Un mot dans "cette" phrase est entre guillemets !  Vous devriez faire :

    $var = "Un mot dans ""cette"" phrase est entre guillemets !"

ou utilisez des apostrophes à la place :

    $var = 'Un mot dans "cette" phrase est entre guillemets !'

 

Retour

8. Que signifient les paramètres de fenêtre "title" et "text" ?

Il y a une description détaillée ici.

 

Retour

9. Pourquoi ne puis-je afficher une variable en effectuant "Ma variable est $variable" ?

Si vous avez une variable nommée $msg et que vous voulez l'afficher dans une MsgBox alors cela ne marchera PAS :

    MsgBox(0, "Exemple", "Ma variable est $msg")

En l'état, cela affichera  Ma variable est $msg .  Pour y arriver, dire à AutoIt de joindre la chaîne et la variable ensemble utilisant l'opérateur & :

    MsgBox(0, "Exemple", "Ma variable est " & $msg)

 

Mode Avancé : Si vous avez beaucoup de variables à insérer dans une chaîne, alors vous trouverez utile la fonction StringFormat().  Par exemple, si je voulais insérer $var1 à $var5 dans une chaîne, il serait plus facile de faire :

     $msg = StringFormat("Var1 est %s, Var2 est %s, Var3 est %s, Var4 est %s, Var5 est %s", $var1, $var2, $var3, $var4, $var5)
     MsgBox(0, "Exemple", $msg)

 

Retour

10. Quand j'utilise Send() pour envoyer une variable, il arrive des choses bizarres ?

Si vous envoyez le contenu d'une variable, soyez attentif si il contient des caractères spéciaux comme ! ^ + {SPACE} car il seront considérés comme des raccourcis-clavier spéciaux - Rarement ce que l'on attend.  Pour contourner le problème, utilisez la méthode RAW de Send() qui ne traduit pas les touches spéciales :

    Send($myvar, 1)

 

Retour

11. Quelle est la différence entre la valeur return et @error ?

Généralement une valeur de retour est utilisée pour signaler la réussite d'une fonction.  Mais, si une fonction est déjà en train de retourner quelque chose (Comme WinGetText() ) alors nous aurons besoin d'une autre solution pour savoir si la fonction à bien réussie, en attribuant une valeur à @error.

 

Retour

12. Comment sortir d'un script par un raccourci clavier ?

Ah, c'est très facile.  Si vous désirez faire stopper un script quand vous pressez une certaine combinaison de touches, alors utilisez la fonction HotKeySet() pour lancer une fonction utilisateur quand la touche désirée est pressée.  Cette fonction utilisateur devra juste contenir la commande de sortie Exit.

Voici un code qui interrompra le script quand vous presserez CTRL+ALT+x :

HotKeySet("^!x", "Sortie")
...
...
; Le reste du script
...
...
Func Sortie()
    Exit
EndFunc

 

Retour

13. Comment utiliser une icône personnalisée quand je compile mes scripts ?

Vous devez ouvrir le programme complet de compilation (au lieu de simplement faire un clic droit sur un script et de sélectionner Compile).  Cette page décrit le compilateur en détails.

 

Retour

14. Comment puis-je être sûr qu'une seule copie de mon script est exécutée ?

Utilisez la fonction _Singleton(). Voir la documentation des Fonctions Utilisateur Définies pour plus de détails sur _Singleton() et comment l'utiliser.

Retour

15. Quelles sont les limites techniques actuelles d'AutoIt v3 ?

Voici des détails sur les limites techniques actuelles d'AutoIt. Notez s'il vous plaît que certaines des limites sont théoriques et vous pourriez rencontrer des problèmes de performances ou de mémoire avant d'atteindre les limites actuelles.

 

Longueur maximum d'une seule ligne de script : 4,095
Longueur maximum d'une chaîne : 2,147,483,647 caractères

Portée numérique (Virgule flottante ): 1.7E–308 à 1.7E+308 avec une précision de 15 chiffres
Portée numérique (Nombre entier): Entier signé de 64-bit
Nombres Hexadecimaux : Entier signé de 32-bit (0x80000000 à 0x7FFFFFFF)

Tableaux : Un maximum de 64 dimensions et/ou un total de 16 millions d'éléments
Profondeur maximum d'appels de fonction récursive : 5100 niveaux

Nombre maximum de variables utilisées à un moment donné : illimité
Nombre maximum de fonctions utilisateur définies : illimité

Nombre maximum de fenêtres GUI: illimité
Nombre maximum de contrôles GUI par fenêtre : 65532

 

Retour

16. Je vois un symbole d'image absente dans le fichier d'aide, dans les exemples.

Ceci devrait être le bouton vous permettant d'ouvrir les exemples dans le fichier d'aide.
Ce problème est dût au fait que le fichier hhctrl.ocx n'est pas correctement enregistré ou corrompu.
Essayez de l'enregistrer en faisant "regsvr32 hhctrl.ocx" à partir de l'invite de commande, ou vérifiez sa validité.
 

Retour