#include-once
#cs
*
* Fichier de gestion d'extensions d'application AutoIt
*
* Contient les fonctions utiles à la création d'une
* extension et à l'utilisation d'une extension.
*
* Attention : Les fichiers inclus, les paramètres, les
* variables et toutes les modifications
* apportés par l'extension d'application
* n'ont aucun effet sur le script qui les
* appelles. Seul la valeur de retour de la
* fonction est disponnible.
*
* Version : 1.0
* Date : 02/02/2013
* Auteur : TT22
*
#ce
; Paramètres de lancement d'une application...
; "File.ext" "Nombre de paramètres" "Param n°x" "Nom de la fonction"
; Fonction : _AAEInit ( [$Function])
; Initialise la création d'une extension d'application.
; Paramètres : $Function : Nom de la fonction à appeller au
; chargement de l'exentsion (facultatif).
; Retour : Aucun.
Func _AAEInit ( $Function = False)
; Définis l'appel de la fonction de fin de script...
OnAutoItExitRegister("__AAEExitNotRequired")
; Récupère les paramètres...
If $CmdLine[0] = 0 Then
_AAEExit (0, 1)
EndIf
Dim $aArgs[$CmdLine[1]+1]
$aArgs[0] = "CallArgArray"
For $i = 2 To $CmdLine[1]+1 Step 1
$Param = StringReplace($CmdLine[$i],"\a",'"')
$aArgs[$i-1] = StringReplace($Param,"\\ ","\")
Next
; Appel la fonction de démarrage...
If $Function Then
Call ( $Function)
; Cherche une erreur...
If @error = 0xDEAD Then _AAEExit (0, 2)
EndIf
; Cherche si une fonction doit être appelé...
If $CmdLine[$CmdLine[0]] <> "false" Then
; Appel la fonction...
$Return = Call ( $CmdLine[$CmdLine[0]], $aArgs)
; Cherche une erreur...
If @error = 0xDEAD Then _AAEExit (0, 3)
Else
$Return = 0
EndIf
; Quitte le script...
_AAEExit ( $Return, 0)
EndFunc
; Fonction : _AAECall ( $File, [$Function, [$Parameters]])
; Appel une fonction dans une extension AAE.
; Paramètres : $File : Chemin d'accès vers le fichier
; d'extension. Ce fichier doit être
; un script AutoIt. Il peut être compilé
; ou non (a3x et exe pris en charge).
; $Function : Nom de la fonction à appeller dans
; l'extension.
; $Parameters : Un tableau contenant les paramètres
; (de type "special array argument", voir
; l'exemple de la fonction "Call").
; Retour : Le retour de la fonction appelé si succès.
; 0 et @error à 1 en cas d'erreur de paramètres.
; 0 et @error à 2 en cas de fonction appelé par
; _AAEInit() non existante.
; 0 et @error à 3 en cas de fonction appelé non
; existante.
; 0 et @error à 4 en cas d'erreur de récupération
; des retours de l'extension.
; 0 et @error à 5 si le fichier n'existe pas.
; 0 et @error à 6 si le paramètre $Parameters est mal
; formaté.
; 0 et @error à 7 si l'extension se ferme de façon
; innatendue.
; Notes : Si aucune fonction n'est appelé, alors seul la
; fonction appelé par _AAEInit() dans l'extension
; sera exécuté (si il y en a une).
Func _AAECall ( $File, $Function = False, $Parameters = False)
; Vérifis si le fichier existe...
If Not FileExists($File) Then Return SetError(5,0,0)
; Prépare la fonction...
If Not $Function Then $Function = "false"
; Prépare les paramètres...
Local $aArgs
If UBound($Parameters) Then
; Cherche une erreur d'array...
If $Parameters[0] <> "CallArgArray" Then Return SetError(6,0,0)
$aArgs = '"'&(UBound($Parameters)-1)&'"'
For $i = 1 To UBound($Parameters)-1 Step 1
$Param = StringReplace($Parameters[$i],"\","\\ ")
$Param = StringReplace($Param,'"','\a')
$aArgs &= ' "'&$Param&'"'
Next
EndIf
; Cherche si le fichier d'extension est un executable...
If StringRight($File,4) = ".exe" Then
; Supprime les fichiers de retour...
$FileName = __FileGetName ( $File)
FileDelete(@TempDir&"\"&$FileName&"_return.tmp")
FileDelete(@TempDir&"\"&$FileName&"_error.tmp")
; Lance le processus...
$PID = Run ( $File&" "&$aArgs&' "'&$Function&'"',@ScriptDir)
While ProcessExists($PID)
; Pause pour éviter la surcharge du processeur.
Sleep(100)
WEnd
; Récupère les retours...
$Return = FileRead(@TempDir&"\"&$FileName&"_return.tmp")
$Error = FileRead(@TempDir&"\"&$FileName&"_error.tmp")
; Cherche une erreur de récupération...
If $Return = "" Or $Error = "" Then Return SetError(4,0,0)
; Retourne les réponses...
Return SetError($Error,0,$Return)
; Si le fichier d'extension n'est pas un executable...
Else
; Cherche si le script qui appel l'extension est compilé...
If @Compiled And StringRight(@ScriptName,4) <> ".a3x" Then
; Supprime les fichiers de retour...
$FileName = __FileGetName ( $File)
FileDelete(@TempDir&"\"&$FileName&"_return.tmp")
FileDelete(@TempDir&"\"&$FileName&"_error.tmp")
; Lance le processus...
$PID = Run ( @ScriptFullPath&" /AutoIt3ExecuteScript """&$File&""" "&$aArgs&' "'&$Function&'"',@ScriptDir)
While ProcessExists($PID)
; Pause pour éviter la surcharge du processeur.
Sleep(100)
WEnd
; Récupère les retours...
$Return = FileRead(@TempDir&"\"&$FileName&"_return.tmp")
$Error = FileRead(@TempDir&"\"&$FileName&"_error.tmp")
; Cherche une erreur de récupération...
If $Return = "" Or $Error = "" Then Return SetError(4,0,0)
; Retourne les réponses...
Return SetError($Error,0,$Return)
; Si le script qui appel n'est pas compilé...
Else
; Supprime les fichiers de retour...
$FileName = __FileGetName ( $File)
FileDelete(@TempDir&"\"&$FileName&"_return.tmp")
FileDelete(@TempDir&"\"&$FileName&"_error.tmp")
; Lance le processus...
$PID = Run ( @AutoItExe&" """&$File&""" "&$aArgs&' "'&$Function&'"',@ScriptDir)
While ProcessExists($PID)
; Pause pour éviter la surcharge du processeur.
Sleep(100)
WEnd
; Récupère les retours...
$Return = FileRead(@TempDir&"\"&$FileName&"_return.tmp")
$Error = FileRead(@TempDir&"\"&$FileName&"_error.tmp")
; Cherche une erreur de récupération...
If $Return = "" Or $Error = "" Then Return SetError(4,0,0)
; Retourne les réponses...
Return SetError($Error,0,$Return)
EndIf
EndIf
EndFunc
; Fonction : _AAEExit ( [$Return, [$Error]])
; Quitte une extension AAE.
; Paramètres : $Return : Code de retour de la fonction _AAECall()
; $Error : Code d'erreur de la fonction _AAECall()
; Retour : Aucun.
Func _AAEExit ( $Return = 0, $Error = 0)
; Supprime l'appel de la fonction de fin de script...
OnAutoItExitUnRegister("__AAEExitNotRequired")
; Supprime les fichiers de retours...
FileDelete(@TempDir&"\"&@ScriptName&"_return.tmp")
FileDelete(@TempDir&"\"&@ScriptName&"_error.tmp")
; Ecrit les retours...
FileWrite(@TempDir&"\"&@ScriptName&"_return.tmp",$Return)
FileWrite(@TempDir&"\"&@ScriptName&"_error.tmp", $Error)
; Quitte le script...
Exit 0
EndFunc
#cs
*
* Fonctions à usage interne...
*
#ce
; Fonction : __FileGetName ( $File)
; Retourne un nom de fichier en fonction de son chemin d'accès.
; Paramètres : $File : Le chemin d'accès du fichier dont
; on souhite obtenir le nom.
; Retour : Le nom du fichier.
Func __FileGetName ( $File)
If Not StringInStr($File,"\") Then Return $File
$Split = StringSplit($File,"\")
Return $Split[$Split[0]]
EndFunc
; Fonction : __AAEExitNotRequired()
; Redirige vers la fonction _AAEExit() en cas de fin de script innatendue.
; Paramètres : Aucun.
; Retour : Aucun.
Func __AAEExitNotRequired()
_AAEExit( 0, 7)
EndFunc