PC-ATI est une équipe de bénévoles qui vous apporte une assistance entièrement gratuite, inscrivez-vous pour participer au forum.

Commencer avec AutoIt

Répondre
Avatar du membre
Amesam
Administrateur du site
Messages : 364
Enregistré le : lun. 5 juin 2017 17:23

Commencer avec AutoIt

Message par Amesam » jeu. 29 juin 2017 22:19

Image
  • Commencer avec AutoIt.
  • Les variables.
  • L'action sous condition.
  • Les boucles.
  • Les fonctions.
  • Les macros.
  • Les Opérateurs.
  • Les UDF.
  • Création du code.
~*~*~*~*~*~*~*~*~*~*~*~*~*~*
Commencer avec AutoIt :
  • Les fichiers Autoit ont une extension .au3 que vous pouvez éditer avec SciTe.
  • SciTE fonctionne comme n’importe quel éditeur de texte (ou presque). Il peut ouvrir plusieurs fichiers simultanément grâce à la gestion des onglets.
  • AutoIt.fr propose un pack en français > pack AutoIt-Fr qui vous permettra d'installer AutoIt, Scite mais également ses outils.
  • Une fois votre installation faite nous allons découvrir Scite.
  • Pour cela faire un clic droit sur le Bureau > Nouveau > Script AutoIt V3
Image
Voici un nouvel icône sur votre Bureau.

Image
  • Faite un Clic droit sur ce nouveau fichier puis Éditer le Script
  • Voici donc notre première page d'édition.
Image
  • Comme on peut le voir les caractères #cs et #ce nous permettent de saisir des informations qui n'auront aucune action sur le script mais qui peuvent être très utile pour se retrouver dans son code.
  • On peut également utiliser le ; pour mettre des commentaires.
  • Attention si nous utilisons la touche moins du clavier numérique c'est la ligne entière qui sera en commentaire avec en début de ligne ;~
  • Sur la capture ci-dessous nous pouvons voir cette ligne :
  • La ligne #pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico) va permettre d'afficher l’icône AutoiT (par défaut) lors de la compilation.
  • Voici un exemple d'un premier script avec les commentaires expliqués.
Image
Pour lancer ce script il suffit d'appuyer sur la touche F5, ce qui donne :
Image
Pour cet exemple nous aurions pu prendre une boite de dialogue :
Image

  • Ceci est une base de départ pour ce langage. Il ne faut pas hésiter à demander à Scite de l'aide en cas de besoin, pour cela il faut faire un clic sur le mot désiré (par exemple MsgBox) et appuyer sur la touche F1 pour afficher l'aide.
  • Ce qui donne pour MsgBox :
Image
Image
Les variables :
  • Quelques bonnes habitudes à prendre avec les variables :
  • Déclarer toutes les variables c'est plus propre et ça permet d'éviter les oublis de déclaration.
  • Si on utilise Opt("MustDeclareVars", 1) les variables non déclarées dans le script seront affichées dans la console comme étant non déclarées et il sera demandé de les déclarer.
  • Une variable en AutoIt commence toujours par ce caractère. $
Mais c'est quoi une variable ?
  • Une variable est une valeur qui va être demandée une ou plusieurs fois dans le code.
  • Par exemple sous Windows nous avons %temp% cette variable nous permet d'accéder au fichier temporaires, pour AutoIt c'est pareil.
Exemple :
Image

Code : Tout sélectionner

Local $MaVariable =("C:\Users\Amesam\AppData\Local\Temp") ; On note que la variables est bien déclaré et que on lui attribue %temp%
ShellExecute($MaVariable) ; Exécute la variable

; Pour éviter les soucis d'attribution de lettre du disque système nous untilisons un Macro (@Homedrive à la la place de C:\)

Local $MaVariable =(@HomeDrive & "\Users\Amesam\AppData\Local\Temp") ; On note que la variables est bien déclaré et que on lui attribue %temp%
ShellExecute($MaVariable) ; Exécute la variable

Bien juger de la portée des variables :
Global
  • La variable va être utilisée à plusieurs reprises dans le code. Dans ce cas il faut la déclarer en entête de programme en Global :
Global $Ma_Variable
Image
Exemple :
Image

Code : Tout sélectionner

Global $Ma_Variable = @OSVersion

 _Mafonction()
 _Mafonction2()

Func _Mafonction()
	MsgBox(0, "Titre", "Ma variable indique l'OS soit :" & $Ma_Variable)
EndFunc

Func _MaFonction2()
	MsgBox(0, "Titre", $Ma_Variable & " est votre système d'exploitation")
EndFunc
Local
  • La variable ne sera utilisée que dans une seule fonction : Elle doit être déclarée en tant que Local.
  • Local $Ma_Variable
Image
DIM REDIM
  • La variable est un tableau. On la déclare initialement en Local ou Global.
  • Pour initialiser un tableau il faut utiliser Dim.
  • Pour modifier la taille du tableau sans perdre son contenu on utilise alors ReDim.
Image

Code : Tout sélectionner

#include <Array.au3>

; Je traite un tableau de 10 éléments en utilisant un Dim
_ArrayTest(10)
; Je traite un tableau de 10 éléments en utilisant un ReDim
_ArrayTest(10, True)

Func _ArrayTest($Compteur, $UtiliserRedim = False)
	Dim $Array[$Compteur] 					;Je définis la taille de mon tableau
	$Array[0] = $Compteur - 1 				;J'alimente le nombre d’éléments du tableau dans la 1ere occurence
	For $i = 1 To $Compteur - 1
		ConsoleWrite('$i = ' & $i & @CRLF)
		If $UtiliserRedim Then ReDim $Array[$i + 1]
		$Array[$i] = 'Ligne n° ' & $i 		;J'alimente mon tableau
	Next
	_ArrayDisplay($Array, 'Redim ' & $UtiliserRedim & ' ?')
EndFunc   ;==>_ArrayTest
  • Le résultat est le même avec Dim ou Redim, c'est juste pour montrer comment l'utiliser.
  • Éviter de déclarer une variable avec Dim. Utiliser plutôt Local et/ou Global.
  • Utiliser le Dim pour un tableau lors de son initialisation dans une fonction : Dim $MonTableau[10]
  • Éviter de déclarer des variables si elles ne sont pas utilisées.
  • Quand c'est possible déclarer les variables en tant que constantes, par exemple :
  • Lorsqu'une constante a été assignée, elle ne peut plus être modifiée.
L'action sous condition :
  • Dans la programmation, tout langage confondu, cette action sous condition sera toujours pareil.
SI (proposition-à-vérifier est vraie ou fausse) ALORS :
on fait ça
SINON
on fait ça
FINI

Code : Tout sélectionner

If ($Var) Then
On fait ça 
Else
On fait ça
EndIf
Exemple :
Image

Code : Tout sélectionner

Global $FLAG = DllCall("user32.dll", "int", "GetSystemMetrics", "long", 67) ; Je déclare ma variable et l'assigne

If $FLAG Then ; Si (If) ma variable ($FLAG)est vrai alors (Then)
	MsgBox(0, "Mode d'exécution", "Mode sans échec") ; Résultat dans une boite de dialogue si ma variable est vrai 
Else ; Sinon 
	MsgBox(0, "Mode d'exécution", "Mode normal") ; Résultat dans une boite de dialogue si ma variable est fausse 
EndIf ; On ferme la condition
Les boucles :
  • Les boucles permettent de répéter une même action plusieurs fois, en n'écrivant qu'une seule fois la procédure.
  • Trois boucles s'offrent à nous :
Boucle de type "For - Next" (Pour)
For ; Pour
; Actions
Next
; Ensuite
  • Cette boucle permettra de comptabiliser.
  • Elle s'utilise lorsque le nombre de fois que nous devons parcourir la boucle est déterminé.
Exemple :
Image

Code : Tout sélectionner

For $i = 0 To 10 Step 1 ; Pour $i on assigne la valeur de 0 à 10 et on compte de 1 en 1
	MsgBox(0, "Message", "La variable $i à la valeur " & $i) ; On affiche le résultat
Next ; On ferme la boucle et on continu 
Boucle de type "While - WEnd" (Tant que)

While ; Tant que
; Actions
WEnd ; on ferme la boucle
  • Elle est utilisée autant de fois tant que l'action effectuée reste inconnu. Si la proposition est fausse dès le départ, la boucle ne se lance pas.
  • Cette boucle n'a pas besoin de compteur pour fonctionner, la boucle est simplement effectuée tant que la condition reste vraie.
Exemple :
Image

Code : Tout sélectionner

Global $i = 0 ; On assigne la variable $i

While($i < 1); Tant que $i est inférieur à 2	
	Local $Var = InputBox("", "Entre ta note à ce tuto entre 0 et 5"); on crée une box pour récupérer la valeur donnée	
	$i = $I+$Var ; On incrémente $i et on ajoute la donnée saisie
	If $i < 5 Then ; Si $i est inférieur à 5		
	MsgBox(0, "Note attribuée", "Merci ;) : " & $i) ; et bien on remercie	
	ElseIf $i > 5 Then ; si la note est supérieur à 5 alors
	MsgBox(0, "", "Note trop forte :) :" & $I) ; On indique que la note est trop forte
	Else ; Sinon	
	MsgBox(0, "", "Cool :) :" & $I) ; Cool le max ;)	
	EndIf ; on ferme la condition	
WEnd ; On ferme la boucle

MsgBox(0, "", " La boucle est terminée est la note attribuée est : " & $i);  La note donnée
La boucle de type "DO - Until" (Faire)

Do ; Faire
; Actions
Until ; Jusqu'à
  • Cette boucle répète une action jusqu'à ce que la condition à atteindre devienne vraie.
  • Elle est utilisée autant de fois tant que l'action effectuée reste inconnu.
Exemple :
Image

Code : Tout sélectionner

Do
    Local $pass = "MDP"
    Local $input = InputBox("Tutoriel", "Entrez le mot de passe :")

    If ($input <> $pass) Then
        MsgBox(0,"Tutoriel", "Mauvais mot de passe !")
    Else
        MsgBox(0,"Tutoriel", "Le mot de passe est correct !")
    EndIf

Until ($input = $pass)
Les fonctions :
  • Une fonction est un bout de code destiné à être exécuté plusieurs fois.
  • Soit à mettre en fin de code, début ou dans une include.
  • On peut lui attribuer le nom que l'on veut, lettre, chiffre et _
  • Exemple Ma_Fonction1()
  • Dans cette fonction on fait une requête WMI, un sous-ensemble du langage SQL.
Image
Image

Code : Tout sélectionner

MsgBox(0, "",  Ma_Fonction1())

Func Ma_Fonction1() ; requête WMI pour récupérer l'OS
	Local $OS = '', $OBJIT
	Local $WBEMFLAGRETURNIMMEDIATELY = 16
	Local $WBEMFLAGFORWARDONLY = 32
	Local $OBJWMISERVICE = ObjGet("winmgmts:\\.\root\CIMV2")
	Local $COLIT = $OBJWMISERVICE.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", $WBEMFLAGRETURNIMMEDIATELY + $WBEMFLAGFORWARDONLY)
	If IsObj($COLIT) Then
		For $OBJIT In $COLIT
			$OS &= $OBJIT.Caption
			$OS &= $OBJIT.CSDVersion & " "
		Next
	EndIf
	Return $OS
EndFunc

Les macros :

  • Ici par exemple nous utilisons @OSVersion qui nous retourne la version du système d'exploitation.
Image
  • Exemple 2 :
  • On peut multiplier la demande.
Image
Image

Code : Tout sélectionner

Local $vMacros = (" Voici le résultat des macros : " & @CRLF & @CRLF _
                & "- Lecteur système :  "  & @homedrive & @CRLF _
                & "- OS :  " & @OSArch & "  " & @OSVersion & @CRLF _
                & "- PC :  " & @ComputerName & @CRLF _
                & "- Utilisateur :  " & @UserName)
MsgBox(0, " - Exemple -",  $vMacros, "")

; si je décompose :

; 1er Ligne :
;-------------

; Local $vMacros est déclaré en local car elle va servir ici dans cette code, et ne sera pas utilisé dans un autre endroit 
; le = affecte une valeur à ma varialble, puis j'ouvre une parenthèse et insère le texte en " et "  puis je joins une esperluette (&) pour joindre mon texte et ma macro.
; Ensuite je demande un retour à la ligne 2 fois  & @CRLF & @CRLF _
; Le _ me permet d'écrire sur la ligne suivante dans mon code.

; 2ème  Ligne et 3/4/5ème lignes  :
;-----------------------------

; j'ouvre une parenthèse et saisi du texte entre " et "  puis je joins une esperluette (&) pour joindre mon texte et ma macro.
; Je commence avec & pour indiquer que je continu à joindre au texte " "  et une & et la macro, je joins à nouveau une esperluette (&) pour joindre ma macro à un retour à la ligne (@CRLF _)
http://www.autoitscript.fr/autoit3/docs/macros.htm a écrit : @AppDataCommonDir Chemin vers Application Data.
@AppDataDir Chemin vers Application Data Roaming de l'utilisateur courant.
@AutoItExe Le Chemin et le nom complet de l'exécutable AutoIt en cours d'exécution. Pour les scripts compilés, c'est le chemin du script compilé; pour les fichiers .a3x et .au3 c'est le chemin de l'interpréteur qui traite le fichier.
@AutoItPID PID du processus dans lequel le script s'exécute (Process IDentifier).
@AutoItVersion Numéro de version d'AutoIt. Ex: 3.3.10.2

@AutoItX64 Retourne 1 si le script est exécuté sous la version native x64 d'AutoIt.
@COM_EventObj Objet d'événement COM entrain d'être renvoyé. Valide seulement dans une fonction d'événement COM.
@CommonFilesDir Chemin vers le dossier Common Files.
@Compiled Retourne 1 si le script est un exécutable compilé; sinon 0.
@ComputerName Nom réseau de l'ordinateur.
@ComSpec Valeur de %comspec%, interpréteur secondaire de COMmandes SPECifiées principalement pour l'utilisation de la ligne de commande, ex. Run(@ComSpec & " /k help | more").
@CPUArch Retourne "X86" quand le CPU est 32-bit et "X64" quand le CPU est 64-bit.
@CR Retour chariot, Chr(13); parfois utilisé pour les retours à la ligne.
@CRLF = @CR & @LF ; typiquement utilisé pour les retours à la ligne.
@DesktopCommonDir Chemin vers Bureau.
@DesktopDepth Profondeur de l'écran principal bits par pixel.
@DesktopDir Chemin vers le bureau de l'utilisateur courant.
@DesktopHeight Hauteur de l'écran principal en pixel. (Résolution verticale)
@DesktopRefresh Vitesse de rafraichissement de l'écran principal en hertz.
@DesktopWidth Largeur de l'écran principal en pixel. (Résolution horizontale)
@DocumentsCommonDir Chemin vers le dossier Documents.
@error Statut du drapeau d'erreur. Voir la fonction SetError().
@exitCode Code de sortie fixé par la commande Exit.
@exitMethod Méthode Exit. Voir la fonction OnAutoItExitRegister().
@extended Valeur étendue renvoyée - Utilisé dans certaines fonctions telles que StringReplace().
@FavoritesCommonDir Chemin vers Favoris.
@FavoritesDir Chemin vers Favoris de l'utilisateur courant.
@GUI_CtrlHandle Handle (Lien vers) du dernier Contrôle GUI cliqué. Valide seulement dans une fonction d'événement. Voir la fonction GUICtrlSetOnEvent().
@GUI_CtrlId Identifiant GUI du dernier Contrôle cliqué. Valide seulement dans une fonction d'événement. Voir la fonction GUICtrlSetOnEvent().
@GUI_DragFile Nom du fichier Drop GUI (laché graphique). Valide seulement pour les événements Drop. Regardez la fonction GUICtrlSetOnEvent().
@GUI_DragId Identifiant du Contrôle Drag GUI (Glisser graphique). Valide seulement pour les événements Drop. Voir la fonction GUICtrlSetOnEvent().
@GUI_DropId Identifiant du contrôle Drop GUI. Valide seulement pour les événements Drop. Regardez la fonction GUICtrlSetOnEvent().
@GUI_WinHandle Handle de la dernière Fenêtre GUI cliquée. Valide seulement dans une fonction d'événement. Regardez la fonction GUICtrlSetOnEvent().
@HomeDrive Lettre de lecteur du répertoire personnel de l'utilisateur courant.
@HomePath Partie du chemin du répertoire personnel de l'utilisateur courant. Pour avoir le chemin complet, utilisez @HomeDrive avec.
@HomeShare Serveur et nom de partage du répertoire personnel de l'utilisateur courant.
@HotKeyPressed Dernier HotKey (Raccourci clavier ) pressé. Regardez la fonction HotKeySet().
@HOUR Heures de l'horloge au format 24H. Plage de 00 à 23.
@InetGetActive Vaut 1 si un téléchargement InetGet est actif, sinon 0.
@InetGetBytesRead Renvoie le nombre d'octets lu pendant un téléchargement InetGet. Vaut -1 en cas d'erreur de téléchargement.
@IPAddress1 Adresse IP du premier adaptateur réseau. Retourne 127.0.0.1 sur certains ordinateurs.

@IPAddress2 Adresse IP du deuxième adaptateur réseau. Retourne 0.0.0.0 si non applicable.
@IPAddress3 Adresse IP du troisième adaptateur réseau. Retourne 0.0.0.0 si non applicable.
@IPAddress4 Adresse IP du quatrième adaptateur réseau. Retourne 0.0.0.0 si non applicable.
@KBLayout Retourne le code de la disposition du clavier. Voir l'Appendix pour les valeurs possibles.
@LF Saut de ligne, Chr(10); occasionnellement utilisé pour les retours à la ligne.
@LocalAppDataDir Chemin vers Local Application Data de l'utilisation en cours.
@LogonDNSDomain Logon du Domaine DNS.
@LogonDomain Logon du Domaine.
@LogonServer Logon du serveur.
@MDAY Jour du mois en cours. Plage de 01 à 31.
@MIN Valeur des Minutes de l'horloge. Plage de 00 à 59.
@MON Mois en cours. Plage de 01 à 12.
@MSEC Valeur en millisecondes de l'horloge. Plage de 00 à 999. La fréquence de mise à jour de cette valeur dépend de la résolution du timer du hardware et ne peut pas être mis à jour chaque milliseconde.
@MUILang Retourne le code caractérisant la langue si disponible (Vista est OK par défaut). Voir Appendice pour les valeurs possibles.
@MyDocumentsDir Chemin vers Mes Documents de l'utilisateur courant.
@NumParams Nombre de paramètres utilisés pour l'appel de la fonction utilisateur.
@OSArch Retourne un des résultats suivants: "X86", "IA64", "X64" - type d'architecture du système en cours d'exécution.
@OSBuild Retourne le numéro de fabrication de l'OS (3790 pour Windows 2003 Serveur).
@OSLang Retourne le code du langage de l'OS. Voir l'Appendix pour les valeurs possibles.
@OSServicePack Information du Service pack dans la forme "Service Pack 3".
@OSTYPE Retourne "WIN32_NT" pour NT/2000/XP/2003/Vista et retourne "WIN32_WINDOWS" pour 95/98/Me.
@OSVersion Retourne un des éléments suivants: "WIN_81", "WIN_8", "WIN_7", "WIN_VISTA", "WIN_XP", "WIN_XPe",
pour serveurs Windows: "WIN_2012R2", "WIN_2012", "WIN_2008R2", "WIN_2008", "WIN_2003"
@ProcessorArch Retourne un des éléments suivant : "X86", "IA64", "X64"
@ProgramFilesDir Chemin vers le dossier Program Files.
@ProgramsCommonDir Chemin vers le menu démarrer tous les programmes.
@ProgramsDir Chemin vers Tous les programmes de l'utilisateur courant (Dossier du menu démarrer).
@ScriptDir Répertoire contenant le script en cours d'exécution. (Le résultat ne contient pas d'antislash à la fin)
@ScriptFullPath Equivalent de @ScriptDir & "\" & @ScriptName.
@ScriptLineNumber Numéro de la ligne en cours d'exécution. Utile pour le débugage, particulièrement quand une fonction est appelée : vous pouvez lui passer la ligne en cours (Ne marche pas dans un script compilé).
@ScriptName Nom de fichier du script en cours d'exécution.
@SEC Valeur des Secondes de l'horloge. Plage de 00 à 59.
@StartMenuCommonDir Chemin vers le dossier Démarrer.
@StartMenuDir Chemin vers le menu Démarrer de l'utilisateur courant.
@StartupCommonDir Chemin vers le dossier Démarrage.
@StartupDir Chemin vers le dossier Démarrage de l'utilisateur courant.
@SW_DISABLE Désactive la fenêtre.
@SW_ENABLE Active la fenêtre.
@SW_HIDE Cache la fenêtre et en active une autre.
@SW_LOCK Verrouille la fenêtre pour éviter d'y écrire.
@SW_MAXIMIZE Maximise la fenêtre.
@SW_MINIMIZE Minimise la fenêtre et active la fenêtre de niveau supérieur suivante dans l'ordre Z.
@SW_RESTORE Active et affiche la fenêtre. Si la fenêtre est minimisée ou maximisée, le système la restaure à ses dimensions et position originales. Une application peut spécifier ce drapeau en restaurant une fenêtre minimisée.
@SW_SHOW Active la fenêtre et l'affiche à ses dernières dimensions et position.
@SW_SHOWDEFAULT Fixe l'état d'affichage basé sur la valeur SW_ spécifiée par le programme qui a démarré l'application.
@SW_SHOWMAXIMIZED Active la fenêtre, et l'affiche maximisée.
@SW_SHOWMINIMIZED Active la fenêtre, et l'affiche minimisée.
@SW_SHOWMINNOACTIVE Affiche et minimise la fenêtre. Cette valeur est la même que @SW_SHOWMINIMIZED, excepté que la fenêtre n'est pas activée.
@SW_SHOWNA Affiche la fenêtre à ses dimensions et position actuelles. Cette valeur est la même que @SW_SHOW, excepté que la fenêtre n'est pas activée.
@SW_SHOWNOACTIVATE Affiche une fenêtre à ses dernières dimensions et position. Cette valeur est la même que @SW_SHOWNORMAL, excepté que la fenêtre n'est pas activée.
@SW_SHOWNORMAL Active et affiche une fenêtre. Si la fenêtre est minimisée ou maximisée, le système la restaure à ses dimensions et position originales. Une application peut spécifier ce drapeau en affichant la fenêtre pour la première fois.
@SW_UNLOCK Déverrouille une fenêtre pour autoriser l'écriture.
@SystemDir Chemin vers le dossier System (ou System32) de Windows.
@TAB Caractère de tabulation, Chr(9).
@TempDir Chemin vers le dossier temp.
@TRAY_ID Identifiant du dernier élément cliqué pendant TraySetOnEvent() ou une action TrayItemSetOnEvent().
@TrayIconFlashing Retourne 1 si l'icône de la barre des taches clignote; sinon, retourne 0.
@TrayIconVisible Retourne 1 si l'icône de la barre des taches est visible; sinon, retourne 0.
@Unicode Retourne 1 si la version Unicode d'AutoIt est utilisée pour l'exécution (AutoIt3.exe) ou 0 si c'est la version ANSI (AutoIt3A.exe).

Habituellement, cette macro n'est pas requise puisque AutoIt traite les conversions Unicode/ANSI. Cependant, elle peut être requise pour l'utilisation de certains DllCalls() ou de messages Windows directs.

@UserProfileDir Chemin vers le dossier du profil de l'utilisateur courant.
@UserName Nom de la session active (Généralement le nom de l'utilisateur en cours).
@WDAY Jour de la semaine en numérique. De 1 à 7 (de Dimanche jusqu'à Samedi).
@WindowsDir Chemin vers le dossier Windows.
@WorkingDir Current/active working directory. (Result does not contain a trailing backslash).
@YDAY Jour de l'année en cours. De 1 à 365 (ou 366 pour une année bissextile).
@YEAR Année en cours sur quatre chiffres.
Les Opérateurs :
  • Le premier opérateur à connaitre est = il nous permet d'affecter une valeur.
  • Par exemple : $Ma_Variable = 10
  • Ou permet de tester si deux valeurs sont égales.
  • Exemple : If $Ma_variable = 1 Then

Code : Tout sélectionner

Local $Ma_variable = @HomeDrive

If $Ma_variable = 0 Then
	MsgBox(0, "", @HomeDrive & " -  La valeur est la bonne")
Else
	MsgBox(0, "", " La valeur n'est pas la bonne")
EndIf
  • Pour tester si deux valeurs sont différentes on utilise <>
  • Exemple : If $Ma_variable <> $Ma_variable1 Then

Code : Tout sélectionner

Local $Ma_variable = 7
Local $Ma_var = 7

If $Ma_var <> $Ma_variable Then
	MsgBox(0, "", " Elles sont différentes")
Else
	MsgBox(0, "", "elles sont identiques")
EndIf
http://www.autoitscript.fr/autoit3/docs/intro/lang_operators.htm a écrit : = Affectation, exemple: SvVar = 5 (affecte le nombre 5 à SvVar)
+ = Affectation avec addition. Exemple: SvVar
+ = 1 (ajoute 1 à SvVar)
-= Affectation avec soustraction.
*= Affectation avec multiplication.
/= Affectation avec division.
& Concatène/joint deux chaînes. Exemple: "un" & 10 (equals 'unlO')
&= Affectation avec concaténation; Exemple: SvVar "un", et puis SvVar &= 10 (SvVar est maintenant égal à 'unlO')
+ Additionne deux nombres. Exemple: 10 + 20 {égale 30)
- Soustrait deux nombres. Exemple: 20 - 10 (égale 10) Agit aussi comme un opérateur unaire (pour affecter une valeur négative à une variable).
★ Multiplie deux nombres. Exemple: 20 * 10 (égale 200)
/ Divise deux nombres. Exemple: 20/10 (égale 2)
A Elève un nombre à une puissance. Exemple: 2 4 (égale 16)
= Teste si deux valeurs sont égales. Exemple: If Svar 5 Then (vrai si SvVar égale 5). Insensible à la casse quand utilisé avec des chaînes.
= = Teste si deux chaînes sont égales. Sensible à la casse. Les valeurs gauche et droite sont converties en chaînes si elles ne sont pas déjà des chaînes. Cet opérateur devrait être utilisé seulement si la comparaison des chaînes nécessite une sensibilité à la casse.
<> Teste si deux valeurs sont différentes. Insensible à la casse quand utilisé avec des chaînes. Pour que la comparaison soit sensible à la casse utilisez Not ("stringT “string2“)
> Teste si la première valeur est plus grande que la seconde. Les chaînes sont comparées dans l'ordre lexicographique même si le contenu de la chaîne semble être numérique.
> = Teste si la première valeur est plus grande ou égale que la seconde. Les chaînes sont comparées dans l'ordre lexicographique même si le contenu de la chaîne semble être numérique.
< Teste si la première valeur est plus petite que la seconde. Les chaînes sont comparées dans l'ordre lexicographique même si le contenu de la chaîne semble être numérique.
< = Teste si la première valeur est plus petite ou égale que la seconde. Les chaînes sont comparées dans l'ordre lexicographique même si le contenu de la chaîne semble être numérique.
And Conjonction logique. Exemple: If SvVar 5 And SvVar2 > 6 Then (Vrai si SvVar égale 5 et SvVar2 est plus grand (strictement) que 6)
Or Disjonction logique. Exemple: If SvVar 5 Or SvVar2 > 6 Then (Vrai si SvVar égale 5 ou SvVar2 est plus grand (strictement) que 6)
Not Négation logique. Exemple: Not 1 (False)

Les UDF :

  • Les UDF (User Defined Functions) sont des fichiers .au3 contenant une multitude de fonctions, c'est une bibliothèques de fonctions.
  • Il suffit de les inclure dans vos includes en début de code.
  • UDF distribué par AutoIt
  • On peut bien évidemment en créer soi même selon les besoins, ces fichiers sont intéressants car ils évitent de réécrire les fonctions.
  • Exemple :
  • L'UDF SystemRestore.au3 de FredAI pour la gestion des points de restauration.

Code : Tout sélectionner

#include-once
#RequireAdmin
; #INDEX# =======================================================================================================================
; Title .........: SystemRestore
; Description ...: Functions to manage the system retore. This includes create, enum and delete restore points.
; Author(s) .....: Fred (FredAI)
; Dll(s) ........: SrClient.dll
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
; _SR_CreateRestorePoint
; _SR_EnumRestorePoints
; _SR_RemoveRestorePoint
; _SR_RemoveAllRestorePoints
; _SR_Enable
; _SR_Disable
; _SR_Restore
; ===============================================================================================================================

; #MODIFIED/IMPLEMENTED# =====================================================================================================================
; WMIDateStringToDate
; ===============================================================================================================================

;Creating the WMI objects with global scope will prevent creating them more than once, to save resources...
Global $obj_SR, $obj_WMI
Global $SystemDrive = EnvGet('SystemDrive') & '\'

; #FUNCTION# ====================================================================================================================
; Name...........: _SR_CreateRestorePoint
; Description ...: Creates a system restore point
; Syntax.........: _SR_CreateRestorePoint($strDescription)
; Parameters ....: $strDescription - The system restore point's description. Can have up to 256 characters.
; Return values .: 	Success - 1
;					Failure - 0 Sets @error to 1 if an error occurs when calling the dll function.
; Author ........: FredAI
; Modified.......:
; Remarks .......: The system restore takes a few seconds to update. According to MSDN, this function doesn't work in safe mode.
; Related .......: _SR_RemoveRestorePoint
; Link ..........:
; Example .......: _SR_CreateRestorePoint('My restore point')
; ===============================================================================================================================
Func _SR_CreateRestorePoint($strDescription)
	Local Const $MAX_DESC = 64
	Local Const $MAX_DESC_W = 256
	Local Const $BEGIN_SYSTEM_CHANGE = 100
	Local Const $MODIFY_SETTINGS = 12
	Local $_RESTOREPTINFO = DllStructCreate('DWORD dwEventType;DWORD dwRestorePtType;INT64 llSequenceNumber;WCHAR szDescription['&$MAX_DESC_W&']')
	DllStructSetData($_RESTOREPTINFO,'dwEventType',$BEGIN_SYSTEM_CHANGE)
	DllStructSetData($_RESTOREPTINFO,'dwRestorePtType',$MODIFY_SETTINGS)
	DllStructSetData($_RESTOREPTINFO,'llSequenceNumber',0)
	DllStructSetData($_RESTOREPTINFO,'szDescription',$strDescription)
	Local $pRestorePtSpec = DllStructGetPtr($_RESTOREPTINFO)

	Local $_SMGRSTATUS = DllStructCreate('UINT  nStatus;INT64 llSequenceNumber')
	Local $pSMgrStatus = DllStructGetPtr($_SMGRSTATUS)

	Local $aRet = DllCall('SrClient.dll','BOOL','SRSetRestorePointW','ptr',$pRestorePtSpec,'ptr',$pSMgrStatus)
	If @error Then Return 0
	Return $aRet[0]
EndFunc ;==> _SR_CreateRestorePoint

; #FUNCTION# ====================================================================================================================
; Name...........: _SR_EnumRestorePoints
; Description ...: Enumerates all existing restore points.
; Syntax.........: _SR_EnumRestorePoints()
; Parameters ....: None
; Return values .: 	Success - An array with info on the restore points:
;							$Array[0][0] => Number of restore points.
;							$Array[n][1] => Restore point's sequence number.
;							$Array[n][2] => Restore point's description.
;							$Array[n][3] => Restore point's creation date.
;					Failure - An empty bi-dimensinal array where $Array[0][0] = 0.
; Author ........: FredAI
; Modified.......:
; Remarks .......:
; Related .......: _SR_RemoveAllRestorePoints()
; Link ..........:
; Example .......: $rPoints = _SR_EnumRestorePoints()
; ===============================================================================================================================
Func _SR_EnumRestorePoints()
	Local $aRet[1][3], $i = 0
	$aRet[0][0] = 0
	If Not IsObj($obj_WMI) Then $obj_WMI = ObjGet("winmgmts:root/default")
	If Not IsObj($obj_WMI) Then Return $aRet
	Local $RPSet = $obj_WMI.InstancesOf("SystemRestore")
	If Not IsObj($RPSet) Then Return $aRet
	For $RP In $RPSet
		$i += 1
		ReDim $aRet[$i+1][3]
		$aRet[$i][0] = $RP.SequenceNumber
		$aRet[$i][1] = $RP.Description
		$aRet[$i][2] = WMIDateStringToDate($RP.CreationTime)
	Next
	$aRet[0][0] = $i
	Return $aRet
EndFunc ;==> _SR_EnumRestorePoints

Func WMIDateStringToDate($dtmDate)
	Return (StringMid($dtmDate, 5, 2) & "/" & _
	StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
	& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
EndFunc ;==> WMIDateStringToDate

; #FUNCTION# ====================================================================================================================
; Name...........: _SR_RemoveRestorePoint
; Description ...: Deletes a system restore point.
; Syntax.........: _SR_RemoveRestorePoint($rpSeqNumber)
; Parameters ....: $rpSeqNumber - The system restore point's sequence number. can be obtained with _SR_EnumRestorePoints
; Return values .: 	Success - 1
;					Failure - 0 and sets @error
; Author ........: FredAI
; Modified.......:
; Remarks .......: The system restore takes a few seconds to update. According to MSDN, this function doesn't work in safe mode.
; Related .......: _SR_RemoveAllRestorePoints
; Link ..........:
; Example .......: _SR_RemoveRestorePoint(20)
; ===============================================================================================================================
Func _SR_RemoveRestorePoint($rpSeqNumber)
	Local $aRet = DllCall('SrClient.dll','DWORD','SRRemoveRestorePoint','DWORD',$rpSeqNumber)
	If @error Then
		Return SetError(1,0,0)
	ElseIf $aRet[0] = 0 Then
		Return 1
	Else
		Return SetError(1,0,0)
	EndIf
EndFunc ;==> _SR_RemoveRestorePoint

; #FUNCTION# ====================================================================================================================
; Name...........: _SR_RemoveAllRestorePoints
; Description ...: Deletes all existing system restore points.
; Syntax.........: _SR_RemoveAllRestorePoints()
; Parameters ....: None
; Return values .: 	Success - The number of deleted restore points.
;					Failure - Returns 0 if no restore points existed or an error occurred.
; Author ........: FredAI
; Modified.......:
; Remarks .......: The system restore takes a few seconds to update. According to MSDN, this function doesn't work in safe mode.
; Related .......: _SR_RemoveRestorePoint
; Link ..........:
; Example .......: $rpDeleted = _SR_RemoveAllRestorePoints()
; ===============================================================================================================================
Func _SR_RemoveAllRestorePoints()
	Local $aRP = _SR_EnumRestorePoints(), $ret = 0
	For $i = 1 To $aRP[0][0]
		$ret += _SR_RemoveRestorePoint($aRP[$i][0])
	Next
	Return $ret
EndFunc ;==> _SR_RemoveAllRestorePoints

; #FUNCTION# ====================================================================================================================
; Name...........: _SR_Enable
; Description ...: Enables the system restore.
; Syntax.........: _SR_Enable($DriveL = $SystemDrive)
; Parameters ....: $DriveL: The letter of the hard drive to monitor. Defaults to the system drive (Usually C:). See remarks.
; Return values .: 	Success - 1.
;					Failure - 0
; Author ........: FredAI
; Modified.......:
; Remarks .......: Acording to MSDN, setting a blank string as the drive letter, will enable the system restore for all drives,
;					+but some tests revealed that, on Windows 7, only the system drive is enabled.
;					+This parameter must end with a backslash. e.g. C:\
; Related .......: _SR_Disable
; Link ..........:
; Example .......: $enabled = _SR_Enable()
; ===============================================================================================================================
Func _SR_Enable($DriveL = $SystemDrive)
	If Not IsObj($obj_SR) Then $obj_SR = ObjGet("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
	If Not IsObj($obj_SR) Then Return 0
	If $obj_SR.Enable($DriveL) = 0 Then Return 1
	Return 0
EndFunc ;==> _SR_Enable

; #FUNCTION# ====================================================================================================================
; Name...........: _SR_Disable
; Description ...: Disables the system restore.
; Syntax.........: _SR_Disable($DriveL = $SystemDrive)
; Parameters ....: $DriveL: The letter of the hard drive to disable monitoring. Defaults to the system drive (Usually C:). See remarks.
; Return values .: 	Success - 1.
;					Failure - 0
; Author ........: FredAI
; Modified.......:
; Remarks .......: Acording to MSDN, setting a blank string as the drive letter, will enable the system restore for all drives,
;					+but some tests revealed that, on Windows 7, only the system drive is enabled.
;					+This parameter must end with a backslash. e.g. C:\
; Related .......: _SR_Enable()
; Link ..........:
; Example .......: $disabled = _SR_Disable
; ===============================================================================================================================
Func _SR_Disable($DriveL = $SystemDrive)
	If Not IsObj($obj_SR) Then $obj_SR = ObjGet("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
	If Not IsObj($obj_SR) Then Return 0
	If $obj_SR.Disable($DriveL) = 0 Then Return 1
	Return 0
EndFunc ;==> _SR_Disable

; #FUNCTION# ====================================================================================================================
; Name...........: _SR_Restore
; Description ...: Initiates a system restore. The caller must force a system reboot. The actual restoration occurs during the reboot.
; Syntax.........: _SR_Restore($rpSeqNumber)
; Parameters ....: $rpSeqNumber - The system restore point's sequence number. Can be obtained with _SR_EnumRestorePoints
; Return values .: 	Success - 1.
;					Failure - 0
; Author ........: FredAI
; Modified.......:
; Remarks .......: After calling this function, call Shutdown(2) to reboot.
; Related .......: _SR_EnumRestorePoints
; Link ..........:
; Example .......: If _SR_Restore(20) Then Shutdown(2)
; ===============================================================================================================================
Func _SR_Restore($rpSeqNumber)
	If Not IsObj($obj_SR) Then $obj_SR = ObjGet("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
	If Not IsObj($obj_SR) Then Return 0
	If $obj_SR.Restore($rpSeqNumber) = 0 Then Return 1
	Return 0
EndFunc ;==> _SR_Restore

  • Exemple d'utilisation :
#include < SystemRestore.au3>
#include <Date.au3>

_SR_CreateRestorePoint("Point de restauration avec UDF SystemRestore.au3 : " & _NowDate() & " A : " & _NowTime())
  • Ceci va créer un nouveau point de restauration.
  • A partir de W8 il faut traiter une clé de registre si l'on veut que la création s'exécute.

Code : Tout sélectionner

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore", "SystemRestorePointCreationFrequency", "REG_DWORD", 0


Création du code :

  • Quand on crée quelques lignes on se préoccupe peu de la structure du code, mais si nous rajoutons beaucoup de fonction un code peu devenir très vite compliqué à lire.
  • Il faut utiliser les includes. Dans ces includes nous trouverons des fichiers .au3 avec les fonctions utile au code.
  • Si nous voulons créer un code avec une interface (GUI) il est conseillé de suivre une méthode simple mais utile.
  • Le code commence par nos includes, puis la déclaration des variables, ensuite la construction de la GUI
  • Vous pouvez utiliser Koda pour construire votre GUI, attribuer facilement le nom à vos variables, agir sur la police, couleur ...
  • Koda se trouve via le menu Outils ou Alt + M
Les Includes :
  • Elles permettent dans un premier temps de stocker les UDF (Ensemble de fonction dans un même fichier .au3) que AutoIt charge, comme par exemple #include <ButtonConstants.au3>. Fonction GUICTRL (Button, Group, Radio, Checkbox) de l'include GuiButton.au3
  • Elles servent également à importer n’importe quel UDF, nous pouvons en trouver sur la toile. Exemple
Les Variables :
  • Il est bon de déclarer ses variables, souvent quand le fichier .au3 contenant votre code et compiler pour un .exe il se peut que vous ayez cette fenêtre.
Image
  • Si on utilise Opt("MustDeclareVars", 1) les variables non déclarées dans le script seront affichées dans la console.
  • Il ne faut pas laisser cette ligne active à la compilation cela engendre des soucis d'exécution du programme. Un ; devant la ligne pour la rendre inactive.
La Gui :
  • L'utilisation de Koda Form Designer est un avantage considérable. Cet outil sera très utile pour la construction de la GUI.
  • Voici son interface ;
Image
  • Une fois la gui construite vous pouvez générer le code.
  • Pour voir ce que donne votre GUI vous pouvez cliquer sur la flèche droite dans le cadre de l'image ci-dessus.
  • Pour afficher le code il faut sélectionner la flèche de gauche.
Image
Exemple commenté de la création d' un code
Image
Image

Code : Tout sélectionner

#Cs ~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
Cet exemple est une de base pour débuter ces codes

On commence par les fichiers include (#include)
Les fichiers 'include' contiennent les constantes relatives aux fonctions UDF.
Include AutoIt :--> C:\Program Files (x86)\AutoIt3\Include

#RequireAdmin :--> Spécifie que le script en cours exige les droits d'administrateur complets pour fonctionner.
#include-once :--> Spécifie que le fichier courant ne peut être inclus qu'une seule fois.
#include <ButtonConstants.au3> :--> Fonction GUICTRL (Button, Group, Radio, Checkbox) de l'include GuiButton.au3
#include <EditConstants.au3> :--> Fonction GUICTRL (Edit, Input) de l'include GuiEdit.au3
#include <GUIConstantsEx.au3> :--> Fonction GUICTRL (GUI Create, events)
#include <StaticConstants.au3> :--> Fonction GUICTRL  Label, Pic, Icon
#include <WindowsConstants.au3> :--> Fonction GUICTRL  Gui extended style
#include <OS.au3>
On peut créer soit méme ces include. Il suffit de créer un autre fichier .au3 et de l'enregistrer sous le même répertoires que le fichiers de base.
Exemple ci-dessous

Je fais mon nouveau fichier (Que je nomme OS.au3) que j'enregistre dans le même répertoire et j'inclus cette fonction pour récupérer des infos sur l'OS

Func _GETWINDOWSVERSION(); :--> On ouvre la fonction
; :--> Déclaration des variables
	Local $OS = "", $OBJIT
	Local $WBEMFLAGRETURNIMMEDIATELY = 16
	Local $WBEMFLAGFORWARDONLY = 32
; :--> Classe WMI
	Local $OBJWMISERVICE = ObjGet("winmgmts:\\.\root\CIMV2")
	Local $COLIT = $OBJWMISERVICE.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", $WBEMFLAGRETURNIMMEDIATELY + $WBEMFLAGFORWARDONLY)
; :--> Requêtes WMI
	If IsObj($COLIT) Then
		For $OBJIT In $COLIT ; :--> On ouvre la boucle
			$OS &= $OBJIT.Caption
			$OS &= $OBJIT.CSDVersion & " "
			$OS &= _OSARCH()
		Next
	EndIf
	Return $OS ; :--> Retourne la requête
EndFunc ; :--> On ferme la fonction.
#Ce ~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=

#RequireAdmin
#include-once
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <OS.au3>


; On déclare les variables
Global $Interface, $edAffiche, $Label, $btOS, $btPC

$Interface = GUICreate("Interface", 319, 247, 192, 124) ; Création de la Gui :--> Amuser vous avec Koda :--> Onglet outils puis Koda(Formdesigner)
$edAffiche = GUICtrlCreateEdit("", 32, 40, 257, 129) ; création de la zone d'adition
GUICtrlSetData(-1, "") ; Contrôle de la zone d'édition
$Label = GUICtrlCreateLabel("Résultat de la recherche ", 40, 16, 123, 17) ; Création d'un label
$btOS = GUICtrlCreateButton("Version OS ", 32, 184, 121, 33) ; Création d'un bouton
$btPC = GUICtrlCreateButton("Button2", 160, 184, 129, 33) ; Création d'un bouton
GUISetState(@SW_SHOW) ; Contrôle de la GUI


While 1  ; on ouvre la boucle 
	$nMsg = GUIGetMsg()  ; vérifie que la GUI est bien active 
	Switch $nMsg  ; Déclare l'exécution
		Case $GUI_EVENT_CLOSE  ; La croix pour quitter l'interface
			Exit  ; Si croix validé on sort
		Case $btOS  ; On attribue au bouton Version OS
			GUICtrlSetData($edAffiche, _GETWINDOWSVERSION())  ; On affche le résultat de #include <OS.au3> 
		Case $btPC
			GUICtrlSetData($edAffiche, "Nom du PC" & @ComputerName & @CRLF & "Nom utilisateur" & @UserName)  ; on affiche via des macros le nom du PC et de l'utilisateur.
	EndSwitch ; on stop le switch
WEnd ; on sort


Répondre