Page 1 sur 1
[R] Icone à la compilation
Posté : lun. 13 sept. 2010 12:00
par ZDS
(Re)bonjour à tous !
Je me heurte à un problème, j'ai un script qui est prévu pour être compilé si l'utilisateur le souhaite, une icône étant disponible dans un sous dossier.
En compilant en ligne de commande:
Code : Tout sélectionner
"C:\Program Files\AutoIt\Aut2Exe\Aut2Exe.exe" /in U:\Script\Script.au3 /out C:\AutoIt\Executable.exe /icone U:\Images\Icone.ico /comp 4
ça fonctionne, j'obtiens mon fichier "Executable.exe" avec l'icône voulue dessus.
Par contre, en utilisant les options #AutoIt3Wrapper, et en cliquant droit sur le script > [Compile], j'obtiens bien un fichier exe ("Script;exe", et non "Executable.exe"), avec l'icone AutoIt par défaut.
Peut-être ai-je mal mis les options de compilation (#AutoIt3Wrapper_XXXXXXXX), peut-être que je ne fais pas la bonne manip (passer par le clic droit), ou peut-être aussi que les #AutoIt3Wrapper ne fonctionnent pas sous AutoIt 3.3.6.1 (les messages que j'ai trouvé sur le forum et sur d'autres sites datent de 2007 environ).
j'ai essayé avec #AutoIt3Wrapper_Res_Icon_Add, #AutoIt3Wrapper_Icon, #AutoIt3Wrapper_outfile, avec et sans chemin relatif, etc...
Quelqu'un saurait-il m'aiguiller? Merci d'avance !
ZDS
Re: [..] Icone à la compilation
Posté : lun. 13 sept. 2010 12:28
par Jerome
Coucou,
Ceci fonctionne chez moi :
Code : Tout sélectionner
GUISetIcon(@ScriptDir&"\icon.ico")
TraySetIcon(@ScriptDir&"\icon.ico")
Icone format 16*16.
Jérôme
Re: [..] Icone à la compilation
Posté : lun. 13 sept. 2010 14:16
par ZDS
Salut Jérôme. Ce n'est pas du tout ce que je demande, toi tu parles d'icône à l'exécution, je parle d'icône à la compilation, celle qui apparait sur le fichier dans l'explorateur une fois le script compilé.
Re: [..] Icone à la compilation
Posté : lun. 13 sept. 2010 14:54
par Jerome
Coucou,
Autant pour moi ...
Quand tu compiles ton script, ne fait pas "compile script", mais plutôt "compile with option".
Tu as un champs Icon ou tu peux préciser l'icone que prendra ton éxécutable.
Jérôme
Re: [..] Icone à la compilation
Posté : lun. 13 sept. 2010 16:01
par ZDS
Re, désolé mais je pense que tu es encore à coté ^^
Ce que je cherche à faire, c'est rendre plus facile les actions de l'utilisateur quitte à me compliquer la tâche, ergonomie-&-friendly-user power ! Je souhaite que l'utilisateur en faisant une compilation toute simple (clic droit compile) se retrouve avec un programme joliment construit, avec l'icône que j'ai décidé dans les #AutoIt3Wrapper_. Si l'utilisateur final est contraint de faire un truc plus chiant que la GUI Auto2Exe, autant faire un appel à la ligne de commande depuis le script (ce que je trouve un chouia sale). Quoi que, le passage par "Compile with option" pourrait être intéressant si on pouvait le préremplir, mais apparemment ce n'est pas le cas (je connais déjà la source, la destination et l'icône, mais elles sont vides).
Autant rester dans le sujet, je souhaite utiliser les #AutoIt3Wrapper_XXXXXXXX, mais ça ne passe pas, où est l'erreur...?
U:\Script\Script.au3 :
Code : Tout sélectionner
#Region AutoIt3Wrapper directives section
#AutoIt3Wrapper_Icon=U:\Images\Icone.ico
#AutoIt3Wrapper_OutFile=C:\AutoIt\Executable.exe
#EndRegion
Re: [..] Icone à la compilation
Posté : lun. 13 sept. 2010 16:12
par Jerome
Coucou,
J'ai essayer aussi, et sa ne fonctionne pas aussi chez moi.
J'ai parcourut le forum anglais a la recherche d'une solution, mais il semblerait que ce que tu donnes déjà soit fonctionnelle.
Donc je ne sait pas pour le moment.
Je poursuit mes recherches sur le fofo anglais ...
PS : Sinon au lieu de faire click droit => compiler, tu peux directement faire F7 quand tu es dans le script, ce qui prend en charge #AutoIt3Wrapper_Icon
Jérôme
Re: [..] Icone à la compilation
Posté : lun. 13 sept. 2010 18:51
par Tlem
Afin de prendre en compte les options #AutoIt3Wrapper, vous devez compiler avec C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe et non avec C:\Program Files\AutoIt3\Aut2Exe\Aut2exe.exe.
Pour plus d'informations, cherchez dans l'aide de Scite (C:\Program Files\AutoIt3\SciTE\Scite4AutoIt3.chm).
Re: [..] Icone à la compilation
Posté : ven. 17 sept. 2010 11:12
par ZDS
Bonjour Tlem (désolé pour le délai).
Merci pour ta réponse, même si ce n'est pas ce que je souhaitais entendre ^^ Je ne voulais pas utiliser AutoIt Wrapper, car par défaut il n'est pas présent dans une installation "classique" d'AutoIt (absent du package 3.3.6.1), donc tant pis si on ne peut pas faire autrement (c'était pour simplifier l'utilisation pour le "client" final, si c'est pour la compliquer au final en demandant installer encore un autre truc, je laisse tomber).
J'ai résolu mon problème en passant dans le code du programme un appel à la ligne de commande suivante :
Code : Tout sélectionner
"C:\Program Files\AutoIt\Aut2Exe\Aut2Exe.exe" /in U:\Script\Script.au3 /out C:\AutoIt\Executable.exe /icone U:\Images\Icone.ico /comp 4
depuis un sous-script, puisque bloquant si on souhaite un retour de code d'erreur, ou interrompre la compilation par une simple touche. Je vous fournis le code ci dessous, ça pourra toujours être utile à quelqu'un :
"Lancement Compilation.au3" :
► Afficher le texte
Code : Tout sélectionner
; Appel du script avec argument : "Lancement Compilation.au3" ligne [delai]
; [in] ligne [obligatoire] = ligne de commande transformée en hexadécimal
; [in] delai [optionnel] = delai
; [out] exit code = 0 : Arret normal
; [out] exit code = -1 : Interrompu par utilisateur
; [out] exit code = 1 : Argument invalide
; [out] exit code = 2 : Argument non conforme
; [out] exit code = 3 : Timeout atteint
#NoTrayIcon
; Programme en stand alone, ne pas faire de include de "Lancement Compilation.au3"
#Include <String.au3>
; Fonction d'arret par HotKey
Func force()
$force = True
EndFunc
; Argument en parametre d'exécution
If $cmdLine[0] <> 1 And $cmdLine[0] <> 2 Then Exit 1
; Initialisation du timer et du delai
Global $timer = TimerInit(), $force = False
Global $timerOriginal = $timer, $continue = True
Global $sleep = 500, $delai = 120000 ; 120.000 ms = 2 minutes
If $cmdLine[0] = 2 Then $delai = Number($cmdLine[2])
; Lancement du processus de compilation
Global $ligne = _HexToString($cmdLine[1])
If @error Then Exit 2
$PID = Run($ligne)
; Système d'arret forcé
HotKeySet("{F4}", "force")
; Vérification de la présence du processus Aut2exe (compilateur) et de la validité du timer (delai non atteint)
While $continue
Do
Sleep($sleep)
Until $force Or TimerDiff($timer) > $delai Or Not ProcessExists($PID)
If Not $force And TimerDiff($timer) > $delai And ProcessExists($PID) Then
$continue = (6 = MsgBox(4+48,"Compilation en cours","La commande de compilation suivante est en cours depuis plus de "&Int(TimerDiff($timerOriginal)/60000)&" minutes :"&@CRLF&$ligne&@CRLF&@CRLF&"Souhaitez vous continuer à attendre ?",30))
If $continue Then $timer = TimerInit()
Else
$continue = False
EndIf
WEnd
; Cas de retour du code d'erreur
If TimerDiff($timer) > $delai Then
ProcessClose($PID)
Exit 3
ElseIf $force = True Then
ProcessClose($PID)
Exit -1
Else
Exit 0
EndIf
A ajouter au script à compiler , exemple "Script.au3" :
► Afficher le texte
Code : Tout sélectionner
If 6 = MsgBox(48+4, "Compilation", "Cette opération peut durer plusieurs minutes,"&@CRLF&"le programme ne peut être utilisé en même temps."&@CRLF&@CRLF&"Lancer la compilation?",30) Then
TrayTip("Interface : Compilation", "Compilation du programme en cours,"&@CRLF&"peut prendre plusieurs minutes."&@CRLF&"(F4 : interrompre l'opération)", 30, 2)
Local $aut2exe = StringLeft(@AutoItExe,StringInStr(@AutoItExe,"\",0,-1))&"Aut2Exe\Aut2Exe.exe"
If FileExists($aut2exe) Then
GUISetState(@SW_HIDE,$GUI) ; Suspendre l'affichage de la GUI pendant la compilation
Local $resultat = compilationExecuter($aut2exe, @ScriptFullPath, @ScriptDir&"\executable.exe", "C:\Icone.ico", 4)
GUISetState(@SW_SHOW,$GUI) ; Reprendre l'affichage de la GUI
If $resultat = 0 Then
TrayTip("Interface : Compilation", "Compilation du programme effectuée", 30, 1)
Else
Local $raison = "Code inconnu"
If $resultat = 3 Then $raison = "Timeout atteint"
If $resultat = 2 Then $raison = "Argument non conforme"
If $resultat = 1 Then $raison = "Argument invalide"
If $resultat = -1 Then $raison = "Interrompu par utilisateur"
TrayTip("Interface : Compilation", "Compilation echouée (Exit code '"&$resultat&"' : "&$raison&")", 30, 3)
EndIf
Else
TrayTip("Interface : Compilation", "Compilation échouée : Aut2Exe introuvable"&@CRLF&"("&$aut2exe&")", 30, 3)
EndIf
Else
displayTooltip("Interface : Compilation", "Compilation du programme annulée")
EndIf
Fonction à ajouter à "Script.au3", pour faire l'interface :
► Afficher le texte
Code : Tout sélectionner
#Include <String.au3>
Func compilationExecuter($aut2exe, $source="", $destination="", $icone="", $compression=0)
$ligne = '"'&$aut2exe&'"'& _
cond(FileExists($source),' /in "'&$source&'"', ' /in "'&@ScriptFullPath&'"') & _
cond(String($destination),' /out "'&$destination&'"','') & _
cond(FileExists($icone),' /icon "'&$icone&'"','') & _
cond($compression <> 0, ' /comp '&$compression,'') & _
cond(@AutoItX64=1," /x64","")
If FileExists("Lancement Compilation.exe") Then
Return RunWait('"Lancement Compilation.exe" '&_StringToHex($ligne))
ElseIf FileExists("Lancement Compilation.au3") Then
Return RunWait(@AutoItExe&' "Lancement Compilation.au3" '&_StringToHex($ligne))
EndIf
Return 1
EndFunc
Merci encore ! Je passe le post en [R]ésolu.
ZDS
PS: il y a moyen de faire plus "simple", mais séparer les blocs de code réutilisable en fonction, et limiter les indentations à 5 TAB maximum, est une bonne méthode de prog, surtout en Java ^^
PS2: Ca peut paraitre bizarre comme code, mais on a le choix pour lancer la compilation entre Run (qui retourne le PID, mais permet de continuer le script) et RunWait (qui retourne le code de sortie, mais bloque le script). Ce bout de code permet de récupérer le code d'erreur de la compilation tout en continuant le script, et donc forcer son arrêt, utile quand c'est trop long.
Re: [R] Icone à la compilation
Posté : ven. 17 sept. 2010 18:29
par Tlem
Vous n'êtes pas obligé d'installer d'autres choses. Il vous suffit d'inclure avec votre script le programme
AutoIt3Wrapper.exe et éventuellement ses dépendances si il y en a (ce dont je ne suis pas sur).
Ce n'est pas pire que de ce coltiner
Aut2exe.exe.

Re: [R] Icone à la compilation
Posté : ven. 17 sept. 2010 18:44
par BlueCore
Salut ZDS.
Pour répondre à Tlem, tu peut simplement inclure ResHack.exe et créer un fichier .RC.
Si ça t'intéresse (tu pourra alors rajouter commentaire, icône, version et autres) réponds à ce message, je développerais.
- BlueCore
Re: [R] Icone à la compilation
Posté : ven. 17 sept. 2010 18:47
par Tlem
J'avais pensé à cette réponse, mais si vous lisez la question d'origine, ZDS souhaitait que les directives
#AutoIt3Wrapper_XXXXXXXX soient interprétées ...
Et là, seul
AutoItWrapper peut faire le job.

Re: [R] Icone à la compilation
Posté : sam. 18 sept. 2010 01:34
par ZDS
Re bonsoir,
Pour AutoIt wrapper, ce que je voulais dire, c'est qu'il n'est pas présent dans le répertoire où que ce soit suite à une installation classique d'AutoIt (je ne parle pas de SciTE, juste AutoIt, un développeur a besoin des deux, mais l'utilisateur final n'a pas à s'en****er avec un install en plus que l'interpréteur/compilateur).
Le fichier fourni par le lien "normal" suivant
http://www.autoitscript.com/autoit3/downloads.shtml n'installe pas cet exécutable. Je ne peux donc pas utiliser une fonctionnalité qui n'existe pas ou n'est pas disponible par défaut. Pour l'obtenir il faudrait télécharger EN PLUS l'install de SciTE4AutoIt3, si pour chaque fonctionnalité l'utilisateur doit installer un logiciel en plus on est pas sorti du sable.
Donc merci, la réponse est la bonne pour un "vendeur" (utiliser #AutoItWrapper pour un problème de compilation => installer SciTE4AutoIt un outil de développement, c'est déjà un peu capillotracté, admettons le), mais pas pour le "client".
Re: [R] Icone à la compilation
Posté : sam. 18 sept. 2010 09:31
par Tlem
J'avoue ne pas comprendre votre réflexion sur le fond.
Vous dites vouloir installer AutoIt chez l'utilisateur final. Mais cela dans quel but, car ,
http://www.autoitscript.com/autoit3/downloads.shtml installe l'ensemble des outils de base de développement de AutoIt !
Est-ce à dire que l'utilisateur final à besoin aussi de développer ?
Finalement, j'entrevois trois possibilités :
- 1 - L'utilisateur final ne doit pas faire de développement et vous devez diffuser vos scripts compilés.
Alors l'installation de AutoIt n'est pas nécessaire.
2 - L'utilisateur final ne doit pas faire de développement, mais vous voulez diffuser vos scripts non compilés.
Alors seul AutoIt.exe est nécessaire.
3 - L'utilisateur final doit pouvoir faire du développement et compiler des scripts.
Alors je ne vois pas vraiment quel est le problème à l'installation de deux softs super simple et de taille plutôt réduite (vous pouvez aussi scripter l'installation des deux softs pour qu'elle soit transparente).
Sachez aussi, que sur le forum il existe un Pack complet qui s'occupe de tout, y compris la francisation de certains UDF.
ZDS a écrit :Donc merci, la réponse est la bonne pour un "vendeur" (utiliser #AutoItWrapper pour un problème de compilation => installer SciTE4AutoIt un outil de développement, c'est déjà un peu capillotracté, admettons le), mais pas pour le "client".
Rien à voir.
Vous demandez à utiliser une fonctionnalité propre à
AutoIt3Wrapper, je vous répond donc que vous devez avoir
AutoIt3Wrapper à disposition.
C'est comme si vous vouliez utiliser une commande du genre
Grep sous Windows.
A la base ce n'est pas possible. Pour y arrivé, vous devez installer
CygWin.
