[Tuto] Construction d'un Script (Principe de base).

Espace contenant des tutoriels divers concernant AutoIt.
Règles du forum
.

Tutoriel "La programmation avec Autoit" : https://openclassrooms.com/fr/courses/1 ... vec-autoit
Répondre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

[Tuto] Construction d'un Script (Principe de base).

#1

Message par Tlem »

Pour créer un script, il est bien de suivre certains principes de base, qui vous éviterons les foudres des plus doués, ou des remarques à répétitions.

La construction d'un script, à besoin d'une rigueur toute particulière, car la moindre erreur, peut vous faire perdre un temps

précieux, pour une broutille.

Je vais vous présenter ici, les quelques principes de base, dont j'ai été le témoin sur les différents scripts rencontrés, et forums

spécialisés.

Rien n'est gravé dans le marbre, vous pouvez donc adapter ce squelette à votre convenance, mais n'oublier pas que si vous avez

besoin d'aide, votre script sera lu par plusieurs autre utilisateurs, et un script bien présenté est plus facile à lire qu'un brouillon

sans queue ni tête !

Commençons par un script modèle :

Code : Tout sélectionner

; ----------------------------------------------------
; -------------------- Section I --------------------
; ----------------------------------------------------
; Version AutoIt :    3.2.8.1
; Langue     :        Francais
; Plateforme :        Win9x/XP
; Autheur    :        Tlem (tlem at tuxolem dot net)
;
; Fonction du script: Démonstration de la construction d'un script.
;
;
;
; Version 1.0 : 21/11/2007
;           - Première Version.
;
 
; ----------------------------------------------------
; -------------------- Section II --------------------
; ----------------------------------------------------
; Ne fonctionne que si Scite4AutoIt est installé, et que vous compilez avec options.
; Début de section des directives.
#Region Compiler directives section
 
; Utiliser pour la compatibilité avec Win98 (Y).
#AutoIt3Wrapper_UseAnsi=N
; Icone(s) à rajouter dans les ressources de l'application compilée (Accepte les chemins relatifs).
#AutoIt3Wrapper_Res_Icon_Add=./Res/Icon.ico
; Icone de l'application compilée.
#AutoIt3Wrapper_Icon=./Res/Icon1.ico
; Nom du fichier compiler.
#AutoIt3Wrapper_OutFile=../Demo_v1.0.exe
; Format de sortie de l'application (A3X ou EXE).
#AutoIt3Wrapper_OutFile_Type=exe
; Déscription du script.
#AutoIt3Wrapper_Res_Description=Démo script
; Commentaire du script
#AutoIt3Wrapper_Res_Comment=Utilitaire de démo
; Version du script.
#AutoIt3Wrapper_Res_Fileversion=1.0
; Activation de l'incrémentation de version automatique.
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
 
; Information complèmentaire : Nom interne
#AutoIt3Wrapper_Res_Field=Nom Interne|Démo Script
; Information complèmentaire : date de compilation (Utilisation d'une variable).
#AutoIt3Wrapper_Res_Field=Compilation Date|%date%
; Information complèmentaire : heure de compilation (Utilisation d'une variable).
#AutoIt3Wrapper_Res_Field=Compilation Heure|%time%
; Information complèmentaire : version de AutoIt (Utilisation d'une variable).
#AutoIt3Wrapper_Res_Field=Version du Compilateur|AutoIt v%AutoItVer%
 
; Information complèmentaire : Entreprise.
#AutoIt3Wrapper_res_Field=Entreprise|Tuxolem Software
; Information complèmentaire : auteur.
#AutoIt3Wrapper_Res_Field=Créer par|Tlem
; Information complèmentaire : Email de l'auteur.
#AutoIt3Wrapper_Res_Field=Email|tlem at tuxolem.net
; Information complèmentaire : Copyright ou Copyleft.
#AutoIt3Wrapper_Res_LegalCopyright=Copyright (C) 2003-2007 Tuxolem Software
; Information complèmentaire : Langue du script.
#AutoIt3Wrapper_Res_Language=0x040c
 
; Utilisation de tidy lors du lancement du script (F5).
#AutoIt3Wrapper_run_tidy=y
; Paramètre de sauvegarde Tidy (Copie de sauvegarde du script  0 = Garde toutes les versions).
#Tidy_Parameters= /kv 0
; Utilisation de la compression pour générer l'EXE.
#AutoIt3Wrapper_UseUpx=y
; Taux de compression (2 est une bonne valeur).
#AutoIt3Wrapper_Compression=2
; Controle du script avec AU3Check
#AutoIt3Wrapper_Run_AU3Check=n
; Action à réalisée avant compilation.
#AutoIt3Wrapper_Run_Before=
; Action à réalisée après compilation.
#AutoIt3Wrapper_Run_After=
 
; Fin de la région directives.
#EndRegion
 
 
; ----------------------------------------------------
; -------------------- Section III --------------------
; ----------------------------------------------------
; Déclarations Diverses.
#include <GuiConstants.au3>
#NoTrayIcon
 
; Déclaration des variables.
Global $Largeur = 400, $Hauteur = 100, $Titre = "Form1 "
Local $Ver = "V1.0"
 
 
; ----------------------------------------------------
; -------------------- Section IV --------------------
; ----------------------------------------------------
#Region ### START Koda GUI section ###
 
; Fenetre principale.
$Form1 = GUICreate($Titre & $Ver, $Largeur, $Hauteur, -1, -1)
; Bouton OK.
$Button1 = GUICtrlCreateButton("OK", 150, 50, 75, 25)
 
GUISetState(@SW_SHOW)
 
#EndRegion ### END Koda GUI section ###
 
 
; ----------------------------------------------------
; -------------------- Section V --------------------
; ----------------------------------------------------
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Fin()
 
        Case $Button1
            MsgBox(64, "Info", "Vous avez cliqué le Bouton OK")
 
    EndSwitch
WEnd
 
 
; ----------------------------------------------------
; -------------------- Section VI --------------------
; ----------------------------------------------------
#Region ################### Fonctions ###################
Func Fin()
    ; Lancement du splash screen.
    SplashTextOn("", "Fermeture du script en cours,  Veuillez patienter ...", 450, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
    
    ; Pause de 3 secondes.
    Sleep(3000)
    
    ; Fermeture du splash.
    SplashOff()
    
    Exit
EndFunc   ;==>Fin
#EndRegion ################### Fonctions ###################
Ce script, est composé de 6 sections distinctes (Cas idéal).
Nous allons détailler chaque section dans la suite de ce post.

Section I Présentation de votre script (Non indispensable).

Section II Déclarations des directives pour AutoItWrapper(Non indispensable).

Section III Déclarations des Includes, variables, et autres (Indispensable).

Section IV Construction de votre GUI (Graphic User Interface) (Indispensable).

Section V boucle d'attente d'une action sur la GUI (Indispensable).

Section VI Définition des fonctions utilisées dans le script (Non indispensable si non utilisé).

Voyons maintenant section par section comment ça fonctionne.
Modifié en dernier par Tlem le jeu. 20 déc. 2007 18:57, modifié 3 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Section I

#2

Message par Tlem »

Section I : Présentation de votre script

Cette partie, est en fait la présentation de votre script, et regroupe quelques informations de base.

Code : Tout sélectionner

; Version AutoIt :    3.2.8.1
; Langue     :        Francais
; Plateforme :        Win9x/XP
; Autheur    :        Tlem (tlem at tuxolem dot net)
;
; Fonction du script&#058; Démonstration de la construction d'un script.
;
;
;
; Version 1.0 : 21//2007
;           - Première Version.
 
La première information, permet de savoir avec quelle version de AutoIt ce script à été construit et tester.
Parfois entre les différentes versions de AutoIt, certaines commandes ne sont pas utilisée de la même manière, ce qui peut rendre un script inutilisable.

Le reste des informations permet de savoir sur quelle plateforme peut fonctionner votre script, la description du script, et les différentes informations concernant l'auteur, ainsi que les versions.
Modifié en dernier par Tlem le jeu. 22 nov. 2007 07:11, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Section II

#3

Message par Tlem »

Section II : Déclarations des directives pour AutoItWrapper

Cette partie, n'est pas toujours indispensables, puisqu'elle regroupe les directives utilisées lors de la compilation de l'EXE.
Mais comme certains n'installe pas toujours Scite4AutoIt avec AutoItWrapper, cette partie peut ne pas être utilisée.

Code : Tout sélectionner

#Region Compiler directives section ; Début de section des directives.
 
#AutoIt3Wrapper_UseAnsi=N ; Utiliser pour la compatibilité avec Win98 (Y).
#AutoIt3Wrapper_Res_Icon_Add=./Res/Icon.ico ; Icône(s) à rajouter dans les ressources de l'application compilée (Accepte les chemins relatifs).
#AutoIt3Wrapper_Icon=./Res/Icon1.ico ; Icône de l'application compilée.
#AutoIt3Wrapper_OutFile=../Demo_v1.0.exe ; Nom du fichier compiler.
#AutoIt3Wrapper_OutFile_Type=exe ; Format de sortie de l'application (A3X ou EXE).
#AutoIt3Wrapper_Res_Description=Démo script ; Description du script.
#AutoIt3Wrapper_Res_Comment=Utilitaire de démo ; Commentaire du script
#AutoIt3Wrapper_Res_Fileversion=1.0 ; Version du script.
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n ;; Activation de l'incrémentation de version automatique.
 
#AutoIt3Wrapper_Res_Field=Nom Interne|Démo Script ; Information complémentaire : Nom interne
#AutoIt3Wrapper_Res_Field=Compilation Date|%date% ; Information complémentaire : date de compilation (Utilisation d'une variable).
#AutoIt3Wrapper_Res_Field=Compilation Heure|%time% ; Information complémentaire : heure de compilation (Utilisation d'une variable).
#AutoIt3Wrapper_Res_Field=Version du Compilateur|AutoIt v%AutoItVer% ; Information complémentaire : version de AutoIt (Utilisation d'une variable).
 
#AutoIt3Wrapper_res_Field=Entreprise|Tuxolem Software ; Information complémentaire : Entreprise.
#AutoIt3Wrapper_Res_Field=Créer par|Tlem ; Information complémentaire : auteur.
#AutoIt3Wrapper_Res_Field=Email|tlem at tuxolem.net ; Information complémentaire : Email de l'auteur.
#AutoIt3Wrapper_Res_LegalCopyright=Copyright (C) 2003-2007 Tuxolem Software ; Information complèmentaire : Copyright ou Copyleft.
#AutoIt3Wrapper_Res_Language=0x040c ; Information complémentaire : Langue du script.
 
#AutoIt3Wrapper_run_tidy=y ; Utilisation de tidy lors du lancement du script (F5).
#Tidy_Parameters= /kv 0 ; Paramètre de sauvegarde Tidy (Copie de sauvegarde du script  0 = Garde toutes les versions).
#AutoIt3Wrapper_UseUpx=y ; Utilisation de la compression pour générer l'EXE.
#AutoIt3Wrapper_Compression=2 ; Taux de compression (2 est une bonne valeur).
#AutoIt3Wrapper_Run_AU3Check=n ; Contrôle du script avec AU3Check
#AutoIt3Wrapper_Run_Before= ; Action à réalisée avant compilation.
#AutoIt3Wrapper_Run_After= ; Action à réalisée après compilation.
 
#EndRegion ; Fin de la région directives.
Les explications sont incluses dans le texte sous forme de commentaire (; Le commentaire).
Modifié en dernier par Tlem le jeu. 22 nov. 2007 07:11, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Section III

#4

Message par Tlem »

Section III : Déclarations des Includes, variables, et autres

Cette partie, est indispensable pour les déclarations diverses.
C'est ici que l'on va placer les Includes, et les variables locales, globales ...

Code : Tout sélectionner

; Déclarations Diverses.
#include <GuiConstants.au3>
#NoTrayIcon
 
; Déclaration des variables.
Global $Largeur = 400, $Hauteur = 100, $Titre = "Form1 "
Local $Ver = "V1.0"
- La première ligne, #include <GuiConstants.au3> sert à dire au programme, que nous allons avoir besoin d'utiliser des fonctions stockées dans cet UDF (User Définition File), et donc de le rajouter lors l'utilisation et de la compilation.

- La deuxième ligne, indique au compilateur, de ne pas afficher l'icône du programme dans le systray.

Toute une liste de déclarations peuvent être utilisées en fonction de vos besoins.
Consulter l'aide par la touche F1 section Keyword/Statement Reference.

- Les lignes 6 et 7 servent à déclarer des variables.
La déclaration des variables, dépend de vos besoins.
Une variable globale, sera interprétée dans tout le code, alors qu'une variable locale n'est interprétée que dans la partie du code concernée (Dans une fonction par exemple).
Modifié en dernier par Tlem le jeu. 22 nov. 2007 07:11, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Section IV

#5

Message par Tlem »

Section IV : Construction de votre GUI (Graphic User Interface)

Cette partie, est le plus souvent, la construction de votre interface graphique (GUI pour Graphic User Interface).
Pour ce faire, on crée d'abord la fenêtre principale, puis on rajoute les différents éléments à utilisés.

Pour vous aider, un très bon addon à été ajouter : Koda
Pour lancer Koda, sous Scite4AutoIt, faites ALT+m.
Il ne vous reste plus qu'a construire votre GUI, puis à récupérer le code par F9 puis Insérer dans Scite, pour que le code ce retrouve en lieu et place de votre curseur.

La création de la GUI est liée à l'Include de GUIConstants.au3.
Sans cet Include, vous aurez une erreur au lancement du script.

Code : Tout sélectionner

#Region ### START Koda GUI section ###
 
; Fenetre principale.
$Form1 = GUICreate($Titre & $Ver, $Largeur, $Hauteur, -1, -1)
; Bouton OK.
$Button1 = GUICtrlCreateButton("OK", 150, 50, 75, 25)
 
GUISetState(@SW_SHOW)
 
#EndRegion ### END Koda GUI section ###
Ce code vous affichera une fenêtre vide, du nom de : Form1.

- La première ligne indique que nous allons utiliser des fonctions de l'UDF : GUIConstants.au3.

- La deuxième ligne, permet de délimiter la partie création de la GUI (Ceci n'est pas obligatoire, mais permet une meilleure lisibilité du code).

- La troisième ligne se compose de deux choses :
$Form1, qui récupère le handle de la fenêtre et l'instruction de la création de la fenêtre.
Le fait de récupérer le handle de la fenêtre, nous permettra d'intervenir sur celle-ci plus tard dans le code.

- La quatrième ligne se compose aussi de deux choses :
$Button1, qui récupère le controlID (L'identifiant)du bouton que l'on va créer, puis la commande de création du bouton.
Le fait de récupérer le controlID du bouton, nous permettra d'intervenir sur celui-ci, ou d'intercepter des messages d'actions en provenance de celui-ci.

- La cinquième ligne est la commande qui affiche la GUI.
Vous pouvez grace à cette commande, afficher ou masquer votre GUI.

- Et la sixième ligne est le délimiteur de fin de la partie GUI (Non obligatoire si vous n'avez pas mis la ligne de début de la GUI).
Modifié en dernier par Tlem le jeu. 22 nov. 2007 07:12, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Section V

#6

Message par Tlem »

Section V : Boucle d'attente d'une action sur la GUI

Cette partie, est aussi indispensable, puisqu'il s'agit de la boucle d'attente d'une action sur la GUI.

Sans cette boucle, votre interface apparait, mais disparait aussitôt, sans que vous aillé le temps de voir quoi que ce soit.

Code : Tout sélectionner

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            Fin()
  
        Case $Button1
            MsgBox(64, "Info", "Vous avez cliqué le Bouton OK")
 
    EndSwitch
WEnd
Nous avons donc dans cette section une boucle While / WEnd dans laquelle, on vient lire les messages venant de l'interface graphique par la commande GUIGetMsg(), et on attribue cette valeur, à la variable $Msg.
A chaque retour de boucle (WEnd), on recommence à lire GUIGetMsg(), et ainsi de suite.

A l'intérieur de cette boucle While / WEnd, nous utilisons la fonction Switch / EndSwitch pour faire une action en fonction de la valeur de $Msg (Nous aurions pu aussi utiliser la fonction : Select / EndSelect)
Switch $Msg permet de dire au programme : Selon la valeur de $Msg, traite le cas (Case) concerné.

Autrement dit :
- Si vous cliquer sur la croix de fermeture de la fenêtre, la fonction GUIGetMsg() attribue à $Msg la valeur $GUI_EVENT_CLOSE, et donc lors du traitement par la commande Switch, nous sommes dirigé vers : Case $GUI_EVENT_CLOSE.
Nous appliquons en suivant, un appel à la fonction Fin() faisant partie de la section 6.

- Si vous cliquez sur le bouton Ok, alors la valeur de retour de GUIGetMsg() est $Button1, et donc la boucle effectue donc le traitement de Case $Button1, qui est en l'occurence, l'affichage d'une boite de dialogue "Info".


Il existe une autre méthode de traitement, qui consiste à gérer les actions sur l'interface selon une mode dit : Évènementiel.
Ne maitrisant pas cette partie, je laisserais le soin à d'autres de fournir les explications nécessaires.
Modifié en dernier par Tlem le jeu. 22 nov. 2007 07:12, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Section VI

#7

Message par Tlem »

Section VI : Définition des fonctions utilisées dans le script

Cette partie, n'est utilisée, que si vous avez besoin d'utiliser des fonctions dans votre script.
Une fonction, est une partie de code, que l'on va appeler pour exécuter une suite d'action, puis revenir faire la suite du script (Comme un Call en Batch pour ceux qui connaisse).
Une fonction peut être appelée de n'importe ou dans le script, et revenir à l'endroit ou l'on étais pour exécuter la suite du code (Si on est pas sortit du code entre temps).

Code : Tout sélectionner

#Region ################### Fonctions ###################
Func Fin()
    ; Lancement du splash screen.
    SplashTextOn("", "Fermeture du script en cours,  Veuillez patienter ...", 450, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
    
    ; Pause de 3 secondes.
    Sleep(3000)
    
    ; Fermeture du splash.
    SplashOff()
    
    Exit
EndFunc   ;==>Fin
#EndRegion ################### Fonctions ###################
Je ne détaillerais pas la fonction Fin() car elle est suffisamment commentée.

Ce qu'il faut retenir, c'est que si on a besoin de faire une tache régulièrement dans un code (Lancer l'exécution d'une action depuis plusieurs endroit du code), il vaut mieux dans ce cas créer une fonction.
Pour information, les commandes que vous lancez à partir des Includes, ne sont que des fonctions.
Modifié en dernier par Tlem le jeu. 22 nov. 2007 07:12, modifié 5 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

En attente

#8

Message par Tlem »

En attente.
Modifié en dernier par Tlem le jeu. 22 nov. 2007 07:13, modifié 3 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

En attente

#9

Message par Tlem »

En attente
Modifié en dernier par Tlem le jeu. 22 nov. 2007 07:13, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

En attente

#10

Message par Tlem »

En attente
Répondre