Page 1 sur 1

[R] Nouvelle variable utilisable pour plusieurs scripts ?

Posté : ven. 31 août 2007 17:26
par eln
Bonjour

Je m'explique. Est-il possible de définir une variable pour plusieurs scripts sans devoir la définir pour chaque script.

Merci

Posté : ven. 31 août 2007 17:31
par ani
Pour cela tu devra créer un fichié supplémentaire tanouvellefonction avec l'extension au3

tu y indique #include-once au début
tu y inscrit t'a variable ou divers fonction

et pour appeler le fichier nouvellefonction tu indique dans ton script principal le nom de ton fichier en include
#include 'manouvellefonction'

ou bien tu prend le fichier include-once et tu le met dans le dossier include comme çà pas trop de soucis ..

dans ton script tu indique comme pour les include normal avec le caractère <

Code : Tout sélectionner

 #include<tanouvellefonction>
les point au3 ne passe pas du tout :(
met le principe et a l'identique que celle utilisé pour les includes déjà presente dans autoit (pour certain fichier)
mais je me trompe peut-être suis novice au bout de ligne ^^'

Posté : ven. 31 août 2007 17:46
par eln
Le problème est que je pensais déclarer ma variable par une fonction du type :

Code : Tout sélectionner

$var = FileSelectFolder("Choose a folder.", "")
Et ensuite utiliser cette variable pour indiquer le chemin à plusieurs scripts. A priori ce ne serait pas réalisable avec ta solution.

Posté : ven. 31 août 2007 22:17
par Tlem
Les autres scripts que vous lancé, sont-ils dépendant du premier (Celui qui contient l'utilisation du FileSelectFolder) ?
Font-il partie des includes ?

Si oui, alors pas de problème (Enfin ... je crois ;) )

Si non, il y à d'autres solutions :
- Le stockage de cette variable dans un fichier texte.
- Le stockage de cette variable dans un fichier au3 (Placé dans les includes des autres scripts) (Non fonctionnel si compilation)
- Dans le presse papier.
- Dans une variable système de Windows.
et le top du top :
- Dans la base de registre (Bien plus simple que n'importe quelle solution).

Exemple :

Code : Tout sélectionner

$var = FileSelectFolder("Choose a folder.", "")
RegWrite("HKEY_CURRENT_USER\Software\MonSoft", "Dossier", "REG_MULTI_SZ", $var)

$res = RegRead("HKEY_CURRENT_USER\Software\MonSoft", "Dossier")
Msgbox(64,"Mon dossier",$res)

; Si necessaire, à la fin du script (Pour nettoyer la 'variable') :
RegDelete ("HKEY_CURRENT_USER\Software\MonSoft")

Posté : sam. 01 sept. 2007 10:49
par eln
Tlem a écrit :Les autres scripts que vous lancé, sont-ils dépendant du premier (Celui qui contient l'utilisation du FileSelectFolder) ?
Font-il partie des includes ?

Si oui, alors pas de problème (Enfin ... je crois ;) )
Pour l'instant, j'essaye d'améliorer mes scripts existants ayant découvert AutoIt depuis peu et ne connaissant pas encore toutes les possibilités.
Chaque application a son script.
Je lance un script qui les lance l'un après l'autre.

Code : Tout sélectionner

RunWait ("AutoIt3.exe 7zip.au3")
RunWait ("AutoIt3.exe AdobeReader.au3")
....
et par exemple 7zip.au3 :

Code : Tout sélectionner

FileChangeDir ("I:\Soutien\Commun")
RunWait ("7-Zip 4.42\7z442.exe /S")
Je voudrai les rendre universel car le "I:\Soutien\Commun" peut changer.

Posté : sam. 01 sept. 2007 10:56
par eln
La solution avec inscription dans la base de registre me plait pas mal. Je vais essayer cela.

Merci

Posté : sam. 01 sept. 2007 21:24
par Tlem
Si je puis me permettre, je vous suggère 2 approches.

La première, si vous tenez absolument à avoir un fichier au3 par programme à installer.
Modifier vos scripts au3 comme ceci (Pour 7zip par exemple) :

Code : Tout sélectionner

Func Install_7zip()
FileChangeDir ("I:\Soutien\Commun\")
RunWait ("7-Zip 4.42\7z442.exe /S")
EndFunc
Ensuite dans votre script principal, rajouter chaque fichier dans les includes, et appeler simplement la fonction.
Comme ceci :

Code : Tout sélectionner

#Include <7zip.au3>

; un peut de code
; ...

; Ici j'appel ma fonction d'installation de 7zip.
Install_7zip()
Bon tout ceci n'est quand même pas très logique, alors je vous conseil cette deuxième approche :

Un fichier contenant tout les codes d'installation :
Install.au3 :

Code : Tout sélectionner

#include-once

; On mémorise le chemin d'accès aux programmes d'install
$DirInstall="I:\Soutien\Commun\"

Func Install_7zip()
RunWait ($DirInstall & "7-Zip 4.42\7z442.exe /S")
EndFunc

Func Install_Rar()
RunWait ($DirInstall & "Winrar 3.70\Winrar.exe /S")
EndFunc
Ensuite dans votre programme principal, vous n'avez qu'a appeler les fonctions une a une.

Script_Principal.au3

Code : Tout sélectionner

#Include <Install.au3>

; un peut de code
; ...

Install_7zip()
Install_Rar()
 
Dans ce genre de configuration, vous pouvez aussi envoyer des paramètres aux fonctions que vous appeler (Le dossier ou ce trouve les fichiers par exemple).
Il vous faudra modifier les scripts comme ceci :
Install.au3 :

Code : Tout sélectionner

#include-once

Func Install_7zip($DirInstall)
RunWait ($DirInstall & "7-Zip 4.42\7z442.exe /S")
EndFunc

Func Install_Rar($DirInstall)
RunWait ($DirInstall & "Winrar 3.70\Winrar.exe /S")
EndFunc
Script_Principal.au3

Code : Tout sélectionner

#Include <Install.au3>

$DirInstall = FileSelectFolder("Choose a folder.", "")

Install_7zip($DirInstall)
Install_Rar($DirInstall)
Voilà, j'espère que ces quelques exemples vous apporterons un peut plus de lumière sur les possibilités qui vous sont offertes !

Posté : dim. 02 sept. 2007 09:57
par eln
Tlem a écrit :Voilà, j'espère que ces quelques exemples vous apporterons un peut plus de lumière sur les possibilités qui vous sont offertes !
Désolé pas du tout.
Tlem a écrit :La première, si vous tenez absolument à avoir un fichier au3 par programme à installer.
Pas spécialement. L'avantage pour moi est que si un programme change de version ou le script plante, je retravaille juste le script concerné.

Bon résumons, la première approche me permet de faire la même chose en un peu plus propre.

La deuxième, je suis largué. Je vais étudier cela au calme. Est-elle valable pour des scripts d'installation non silencieuse ?

Merci pour cette aide.

Posté : dim. 02 sept. 2007 10:36
par Tlem
eln a écrit :La deuxième, je suis largué. Je vais étudier cela au calme. Est-elle valable pour des scripts d'installation non silencieuse ?
C'est la même chose que pour des scripts indépendants, la seule différence, c'est la manière de les appeler.
Au lieu de lancer une autre version de AutoIt a chaque lancement d'un script, vous appeler sa fonction.
L'avantage, c'est que tout est dans le même script, et les variables sont en commun.
Vous pouvez appeler les fonctions a votre grès, dans l'ordre ou le désordre (Cela n'a aucune espèce d'importance).

Pour vous y retrouvé, présenter les choses comme ceci :

Code : Tout sélectionner

#include-once

; On mémorise le chemin d'accès aux programmes d'install
$DirInstall="I:\Soutien\Commun"

; **************************************************
; Installation de 7Zip
; **************************************************
Func Install_7zip()
RunWait ($DirInstall & "7-Zip 4.42\7z442.exe /S")
EndFunc

; **************************************************
; Installation de Winrar
; **************************************************
Func Install_Rar()
RunWait ($DirInstall & "Winrar 3.70\Winrar.exe /S")
EndFunc