Je suis actuellement en stage et on me demande de faire un script AutoIt afin de créer une GUI d'après un fichier txt.
J'ai trouvé ici même un script le faisant parfaitement mais la GUI comprend des menus et sous menu or, je doit afficher uniquement des boutons.
► Afficher le texte
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Menu auto via un fichier txt par JL56", 623, 442, 192, 124)
Global $Button1 = GUICtrlCreateButton("quitter", 376, 292, 75, 25)
Global $nbr_element_du_menu = 0, $branche[10], $numero_de_branche = 0
Global $menu_handle_et_valeur[300][2];tableau des handles et ligne de commande
#cs
Lanceur d'applications, de jl56
Utilisation :
Les menus et commandes a executer sont stockés dans un fichier TXT :
au debut de la ligne
un "m=Nom de menu=n° de branche du menu" signifie un nouveau menu avec son nom et position de la branche (0=départ de la branche 1)
un "e=Nom de l'élément=ligne de commande" est un élément de la liste et la ligne de commande
si il n'y a pas de nom présent alors insertion d'un séparateur
si une ligne n'a pas 2 signes = elle n'est pas prise en compte ( utile pour mettre un commentaire ( sans 2 signes = ) ou separarer des blocs par des lignes blanches)
et enfin le mot fin donne l'arret de la lecture du fichier
J'ai paramétré la possibilité d'avoir 300 éléments et 10 niveaux de menu
il n'y a pas de gestion d'erreur (format de la ligne, n° de branche etc ) soyer précis ( 2 signes = par ligne )
#ce
;exemple: ( à copier dans un fichier menuauto.txt supprimer le ; en début de ligne )
; en début de ligne m génére le un nouveau menu. n'oublier pas de placer un signe = aprés le nom de ce menu
; chaque ligne du menu doit avoir 2 signes = et commencer par e ou m
; ensuite l'aboresence respecte le nombre de caractere devant m ou e, le mieux est d'utiliser des tabulations
; cela rend une lecture quasi direct du menu générer.
;
;m=Premier menu=
;
; les éléments de liste déroulante ne sont jamais en début de ligne
;
; e=e1 m1=lc 1 de m1
; e=e2 de m1=lc 2 de m1
; un élément sans nom ajoutera une ligne de séparation dans le menu
; e==
; e=e3 m1=lc 3 de m1
; e==
;
; ici une tabulation suivie de m génère un sous menu de la branche précédente
; m=Sous menu 1 de m1=
;
; on décale les éléments d'une tabulation supplémentaires on vois clairement ci-dessous que e1 e2 et (sm1 de sm1 de m1) font partie de (Sous menu 1 de m1)
;
; e=e1 de Sm1 de m1=lc 1 de Sm1 m1
; e=e2 de Sm1 de m1=lc 2 de Sm1 m1
;
; m=Sm1 de Sm1 de m1=
; e=e1 de Sm1 de Sm1 de m1=lc1 de Sm1 de Sm1 de menu1
;
; m=Sous menu 2 de m1=
; e=e1 de sm2 de m1=lc1 de sm2 de m1
; e=e1 de sm1 de m1=lc1 de sm1 de m1
;
; e=e4 de m1=lc4 de m1
;
; Départ du menu 2
;
;m=Deuxieme menu=
; e=e1 de deuxieme menu=lc1 de deuxieme menu
; arret de la lecture du fichier
;fin
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_menu() ; fonction pour la création du menu
Do ;boucle de la gui
$msg = GUIGetMsg()
;~ test du menu selectionné
For $i = 1 To $nbr_element_du_menu ; boucle sur le nombre d'élément
If $msg = $menu_handle_et_valeur[$i][0] Then ; test si c'est ce menu ( handle ) qui est sélectioné
MsgBox(0, "Programme", $menu_handle_et_valeur[$i][1]) ;boite de dialogue pour afficher la ligne de commande test pour vérifier ( ligne à supprimer )
Run($menu_handle_et_valeur[$i][1]) ;éxecution de la valeur stocké dans le tableau
EndIf
Next
Until $msg = $GUI_EVENT_CLOSE Or $msg = $Button1
Exit
Func _menu() ; fonction pour la création du menu
$file = FileOpen(@ScriptDir & "\menuauto.txt", 0)
If $file = -1 Then
MsgBox(4096, "", "Il manque le fichier menuauto.txt " & @ScriptDir & "\menuauto.txt", 50)
FileClose($file)
Exit
Else
While 1
$ligne = FileReadLine($file) ;lecture séquenciel du fichier
If @error = -1 Then ExitLoop
If StringLeft($ligne, 3) = "fin" Then ExitLoop ; arret de la boucle avec le mot fin
If StringInStr($ligne, "=", 0, 2) Then ;si la ligne contient 2 signes = ont poursuit le code sinon ligne suivante
$element = StringSplit($ligne, "=") ;decoupage de ligne en trois morceaux (séparés par =)
;~ If Not IsArray($element) Then ExitLoop ;vérification du decoupage
If StringRight($element[1], 1) = "m" Then ;si le premier morceau est m alors
$numero_de_branche = StringLen(StringTrimRight($element[1], 1));comptage du nombre de caratére ( tabulation, espace) devant m
If $numero_de_branche = 0 Then ;si c'est la 1er branche (0 lu dans le 3 emm morceau ) creation du menu
$branche[0] = GUICtrlCreateMenu($element[2]) ;création du menu ( avec le nom stocké dans le 2 emm morceau) et stockage du handle dans le tableau $branche [1]
Else ;si la branche <> de 0
$branche[$numero_de_branche] = GUICtrlCreateMenu($element[2], $branche[$numero_de_branche - 1]);Création du sous menu de la branche précédente et stockage du handle dans le tableau $branche [x]
EndIf
EndIf
If StringRight($element[1], 1) = "e" Then ;si le 1er morceau est e alors
$numero_de_branche = StringLen(StringTrimRight($element[1], 1)) - 1;comptage du nombre de caratére ( tabulation, espace) devant e
If $numero_de_branche >= 0 Then; un élément doit toujours faire partie d'une branche soit au minimum 0 car le ligne précédent soutrait 1
$nbr_element_du_menu = $nbr_element_du_menu + 1 ; incrémentation du nombre d'élément
$menu_handle_et_valeur[$nbr_element_du_menu][0] = GUICtrlCreateMenuItem($element[2], $branche[$numero_de_branche]);Création de l'élément et stockage du handle dans le tableau
$menu_handle_et_valeur[$nbr_element_du_menu][1] = $element[3] ;stockage de la ligne de commande dans le tableau
EndIf
EndIf
EndIf
WEnd
FileClose($file)
EndIf
EndFunc ;==>_menu
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Menu auto via un fichier txt par JL56", 623, 442, 192, 124)
Global $Button1 = GUICtrlCreateButton("quitter", 376, 292, 75, 25)
Global $nbr_element_du_menu = 0, $branche[10], $numero_de_branche = 0
Global $menu_handle_et_valeur[300][2];tableau des handles et ligne de commande
#cs
Lanceur d'applications, de jl56
Utilisation :
Les menus et commandes a executer sont stockés dans un fichier TXT :
au debut de la ligne
un "m=Nom de menu=n° de branche du menu" signifie un nouveau menu avec son nom et position de la branche (0=départ de la branche 1)
un "e=Nom de l'élément=ligne de commande" est un élément de la liste et la ligne de commande
si il n'y a pas de nom présent alors insertion d'un séparateur
si une ligne n'a pas 2 signes = elle n'est pas prise en compte ( utile pour mettre un commentaire ( sans 2 signes = ) ou separarer des blocs par des lignes blanches)
et enfin le mot fin donne l'arret de la lecture du fichier
J'ai paramétré la possibilité d'avoir 300 éléments et 10 niveaux de menu
il n'y a pas de gestion d'erreur (format de la ligne, n° de branche etc ) soyer précis ( 2 signes = par ligne )
#ce
;exemple: ( à copier dans un fichier menuauto.txt supprimer le ; en début de ligne )
; en début de ligne m génére le un nouveau menu. n'oublier pas de placer un signe = aprés le nom de ce menu
; chaque ligne du menu doit avoir 2 signes = et commencer par e ou m
; ensuite l'aboresence respecte le nombre de caractere devant m ou e, le mieux est d'utiliser des tabulations
; cela rend une lecture quasi direct du menu générer.
;
;m=Premier menu=
;
; les éléments de liste déroulante ne sont jamais en début de ligne
;
; e=e1 m1=lc 1 de m1
; e=e2 de m1=lc 2 de m1
; un élément sans nom ajoutera une ligne de séparation dans le menu
; e==
; e=e3 m1=lc 3 de m1
; e==
;
; ici une tabulation suivie de m génère un sous menu de la branche précédente
; m=Sous menu 1 de m1=
;
; on décale les éléments d'une tabulation supplémentaires on vois clairement ci-dessous que e1 e2 et (sm1 de sm1 de m1) font partie de (Sous menu 1 de m1)
;
; e=e1 de Sm1 de m1=lc 1 de Sm1 m1
; e=e2 de Sm1 de m1=lc 2 de Sm1 m1
;
; m=Sm1 de Sm1 de m1=
; e=e1 de Sm1 de Sm1 de m1=lc1 de Sm1 de Sm1 de menu1
;
; m=Sous menu 2 de m1=
; e=e1 de sm2 de m1=lc1 de sm2 de m1
; e=e1 de sm1 de m1=lc1 de sm1 de m1
;
; e=e4 de m1=lc4 de m1
;
; Départ du menu 2
;
;m=Deuxieme menu=
; e=e1 de deuxieme menu=lc1 de deuxieme menu
; arret de la lecture du fichier
;fin
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_menu() ; fonction pour la création du menu
Do ;boucle de la gui
$msg = GUIGetMsg()
;~ test du menu selectionné
For $i = 1 To $nbr_element_du_menu ; boucle sur le nombre d'élément
If $msg = $menu_handle_et_valeur[$i][0] Then ; test si c'est ce menu ( handle ) qui est sélectioné
MsgBox(0, "Programme", $menu_handle_et_valeur[$i][1]) ;boite de dialogue pour afficher la ligne de commande test pour vérifier ( ligne à supprimer )
Run($menu_handle_et_valeur[$i][1]) ;éxecution de la valeur stocké dans le tableau
EndIf
Next
Until $msg = $GUI_EVENT_CLOSE Or $msg = $Button1
Exit
Func _menu() ; fonction pour la création du menu
$file = FileOpen(@ScriptDir & "\menuauto.txt", 0)
If $file = -1 Then
MsgBox(4096, "", "Il manque le fichier menuauto.txt " & @ScriptDir & "\menuauto.txt", 50)
FileClose($file)
Exit
Else
While 1
$ligne = FileReadLine($file) ;lecture séquenciel du fichier
If @error = -1 Then ExitLoop
If StringLeft($ligne, 3) = "fin" Then ExitLoop ; arret de la boucle avec le mot fin
If StringInStr($ligne, "=", 0, 2) Then ;si la ligne contient 2 signes = ont poursuit le code sinon ligne suivante
$element = StringSplit($ligne, "=") ;decoupage de ligne en trois morceaux (séparés par =)
;~ If Not IsArray($element) Then ExitLoop ;vérification du decoupage
If StringRight($element[1], 1) = "m" Then ;si le premier morceau est m alors
$numero_de_branche = StringLen(StringTrimRight($element[1], 1));comptage du nombre de caratére ( tabulation, espace) devant m
If $numero_de_branche = 0 Then ;si c'est la 1er branche (0 lu dans le 3 emm morceau ) creation du menu
$branche[0] = GUICtrlCreateMenu($element[2]) ;création du menu ( avec le nom stocké dans le 2 emm morceau) et stockage du handle dans le tableau $branche [1]
Else ;si la branche <> de 0
$branche[$numero_de_branche] = GUICtrlCreateMenu($element[2], $branche[$numero_de_branche - 1]);Création du sous menu de la branche précédente et stockage du handle dans le tableau $branche [x]
EndIf
EndIf
If StringRight($element[1], 1) = "e" Then ;si le 1er morceau est e alors
$numero_de_branche = StringLen(StringTrimRight($element[1], 1)) - 1;comptage du nombre de caratére ( tabulation, espace) devant e
If $numero_de_branche >= 0 Then; un élément doit toujours faire partie d'une branche soit au minimum 0 car le ligne précédent soutrait 1
$nbr_element_du_menu = $nbr_element_du_menu + 1 ; incrémentation du nombre d'élément
$menu_handle_et_valeur[$nbr_element_du_menu][0] = GUICtrlCreateMenuItem($element[2], $branche[$numero_de_branche]);Création de l'élément et stockage du handle dans le tableau
$menu_handle_et_valeur[$nbr_element_du_menu][1] = $element[3] ;stockage de la ligne de commande dans le tableau
EndIf
EndIf
EndIf
WEnd
FileClose($file)
EndIf
EndFunc ;==>_menu
► Afficher le texte
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Menu auto via un fichier txt par JL56", 623, 442, 192, 124)
Global $Button1 = GUICtrlCreateButton("quitter", 376, 292, 75, 25)
Global $nbr_element_du_menu = 0, $branche[10], $numero_de_branche = 0
Global $menu_handle_et_valeur[300][2];tableau des handles et ligne de commande
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_menu() ; fonction pour la création du menu
Do ;boucle de la gui
$msg = GUIGetMsg()
;~ test du menu selectionné
For $i = 1 To $nbr_element_du_menu ; boucle sur le nombre d'élément
If $msg = $menu_handle_et_valeur[$i][0] Then ; test si c'est ce menu ( handle ) qui est sélectioné
MsgBox(0, "Programme", $menu_handle_et_valeur[$i][1]) ;boite de dialogue pour afficher la ligne de commande test pour vérifier ( ligne à supprimer )
Run($menu_handle_et_valeur[$i][1]) ;éxecution de la valeur stocké dans le tableau
EndIf
Next
Until $msg = $GUI_EVENT_CLOSE Or $msg = $Button1
Exit
Func _menu() ; fonction pour la création des boutons
Local $i=10
Local $j=10
$file = FileOpen(@DesktopDir & "\menuauto.txt", 0)
If $file = -1 Then
MsgBox(4096, "", "Il manque le fichier menuauto.txt " & @DesktopDir & "\menuauto.txt", 50)
FileClose($file)
Exit
Else
While 1
$ligne = FileReadLine($file) ;lecture séquenciel du fichier
If @error = -1 Then ExitLoop
If StringLeft($ligne, 3) = "fin" Then ExitLoop ; arret de la boucle avec le mot fin
If StringInStr($ligne, "=", 0, 2) Then ;si la ligne contient 2 signes = ont poursuit le code sinon ligne suivante
$element = StringSplit($ligne, "=") ;decoupage de ligne en trois morceaux (séparés par =)
;~ If Not IsArray($element) Then ExitLoop ;vérification du decoupage
If StringRight($element[1], 1) = "m" Then ;si le premier morceau est m alors
$numero_de_branche = StringLen(StringTrimRight($element[1], 1));comptage du nombre de caratére ( tabulation, espace) devant m
If $numero_de_branche = 0 Then ;si c'est la 1er branche (0 lu dans le 3 emm morceau ) creation du menu
$branche[0] = GUICtrlCreateButton($element[2],$i,$j,75,25) ;création du menu ( avec le nom stocké dans le 2 emm morceau) et stockage du handle dans le tableau $branche [1]
$i=$i+95
If $i > 520 Then
$i=10
$j=$j+40
EndIf
EndIf
EndIf
EndIf
WEnd
FileClose($file)
EndIf
EndFunc ;==>_menu
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Menu auto via un fichier txt par JL56", 623, 442, 192, 124)
Global $Button1 = GUICtrlCreateButton("quitter", 376, 292, 75, 25)
Global $nbr_element_du_menu = 0, $branche[10], $numero_de_branche = 0
Global $menu_handle_et_valeur[300][2];tableau des handles et ligne de commande
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_menu() ; fonction pour la création du menu
Do ;boucle de la gui
$msg = GUIGetMsg()
;~ test du menu selectionné
For $i = 1 To $nbr_element_du_menu ; boucle sur le nombre d'élément
If $msg = $menu_handle_et_valeur[$i][0] Then ; test si c'est ce menu ( handle ) qui est sélectioné
MsgBox(0, "Programme", $menu_handle_et_valeur[$i][1]) ;boite de dialogue pour afficher la ligne de commande test pour vérifier ( ligne à supprimer )
Run($menu_handle_et_valeur[$i][1]) ;éxecution de la valeur stocké dans le tableau
EndIf
Next
Until $msg = $GUI_EVENT_CLOSE Or $msg = $Button1
Exit
Func _menu() ; fonction pour la création des boutons
Local $i=10
Local $j=10
$file = FileOpen(@DesktopDir & "\menuauto.txt", 0)
If $file = -1 Then
MsgBox(4096, "", "Il manque le fichier menuauto.txt " & @DesktopDir & "\menuauto.txt", 50)
FileClose($file)
Exit
Else
While 1
$ligne = FileReadLine($file) ;lecture séquenciel du fichier
If @error = -1 Then ExitLoop
If StringLeft($ligne, 3) = "fin" Then ExitLoop ; arret de la boucle avec le mot fin
If StringInStr($ligne, "=", 0, 2) Then ;si la ligne contient 2 signes = ont poursuit le code sinon ligne suivante
$element = StringSplit($ligne, "=") ;decoupage de ligne en trois morceaux (séparés par =)
;~ If Not IsArray($element) Then ExitLoop ;vérification du decoupage
If StringRight($element[1], 1) = "m" Then ;si le premier morceau est m alors
$numero_de_branche = StringLen(StringTrimRight($element[1], 1));comptage du nombre de caratére ( tabulation, espace) devant m
If $numero_de_branche = 0 Then ;si c'est la 1er branche (0 lu dans le 3 emm morceau ) creation du menu
$branche[0] = GUICtrlCreateButton($element[2],$i,$j,75,25) ;création du menu ( avec le nom stocké dans le 2 emm morceau) et stockage du handle dans le tableau $branche [1]
$i=$i+95
If $i > 520 Then
$i=10
$j=$j+40
EndIf
EndIf
EndIf
EndIf
WEnd
FileClose($file)
EndIf
EndFunc ;==>_menu
► Afficher le texte
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
fin
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
m=Site Clenet=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.clenetsa.fr
m=Site Pont=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.Pontautomobiles.com
m=Google=
e=C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr
fin
Merci d'avance pour vos réponses.
Cordialement.