#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