[UDF] AutoIt Application Extension


SUBMITTED BY: Guest

DATE: May 28, 2013, 6:33 a.m.

FORMAT: Text only

SIZE: 9.5 kB

HITS: 2996

  1. #include-once
  2. #cs
  3. *
  4. * Fichier de gestion d'extensions d'application AutoIt
  5. *
  6. * Contient les fonctions utiles à la création d'une
  7. * extension et à l'utilisation d'une extension.
  8. *
  9. * Attention : Les fichiers inclus, les paramètres, les
  10. * variables et toutes les modifications
  11. * apportés par l'extension d'application
  12. * n'ont aucun effet sur le script qui les
  13. * appelles. Seul la valeur de retour de la
  14. * fonction est disponnible.
  15. *
  16. * Version : 1.0
  17. * Date : 02/02/2013
  18. * Auteur : TT22
  19. *
  20. #ce
  21. ; Paramètres de lancement d'une application...
  22. ; "File.ext" "Nombre de paramètres" "Param n°x" "Nom de la fonction"
  23. ; Fonction : _AAEInit ( [$Function])
  24. ; Initialise la création d'une extension d'application.
  25. ; Paramètres : $Function : Nom de la fonction à appeller au
  26. ; chargement de l'exentsion (facultatif).
  27. ; Retour : Aucun.
  28. Func _AAEInit ( $Function = False)
  29. ; Définis l'appel de la fonction de fin de script...
  30. OnAutoItExitRegister("__AAEExitNotRequired")
  31. ; Récupère les paramètres...
  32. If $CmdLine[0] = 0 Then
  33. _AAEExit (0, 1)
  34. EndIf
  35. Dim $aArgs[$CmdLine[1]+1]
  36. $aArgs[0] = "CallArgArray"
  37. For $i = 2 To $CmdLine[1]+1 Step 1
  38. $Param = StringReplace($CmdLine[$i],"\a",'"')
  39. $aArgs[$i-1] = StringReplace($Param,"\\ ","\")
  40. Next
  41. ; Appel la fonction de démarrage...
  42. If $Function Then
  43. Call ( $Function)
  44. ; Cherche une erreur...
  45. If @error = 0xDEAD Then _AAEExit (0, 2)
  46. EndIf
  47. ; Cherche si une fonction doit être appelé...
  48. If $CmdLine[$CmdLine[0]] <> "false" Then
  49. ; Appel la fonction...
  50. $Return = Call ( $CmdLine[$CmdLine[0]], $aArgs)
  51. ; Cherche une erreur...
  52. If @error = 0xDEAD Then _AAEExit (0, 3)
  53. Else
  54. $Return = 0
  55. EndIf
  56. ; Quitte le script...
  57. _AAEExit ( $Return, 0)
  58. EndFunc
  59. ; Fonction : _AAECall ( $File, [$Function, [$Parameters]])
  60. ; Appel une fonction dans une extension AAE.
  61. ; Paramètres : $File : Chemin d'accès vers le fichier
  62. ; d'extension. Ce fichier doit être
  63. ; un script AutoIt. Il peut être compilé
  64. ; ou non (a3x et exe pris en charge).
  65. ; $Function : Nom de la fonction à appeller dans
  66. ; l'extension.
  67. ; $Parameters : Un tableau contenant les paramètres
  68. ; (de type "special array argument", voir
  69. ; l'exemple de la fonction "Call").
  70. ; Retour : Le retour de la fonction appelé si succès.
  71. ; 0 et @error à 1 en cas d'erreur de paramètres.
  72. ; 0 et @error à 2 en cas de fonction appelé par
  73. ; _AAEInit() non existante.
  74. ; 0 et @error à 3 en cas de fonction appelé non
  75. ; existante.
  76. ; 0 et @error à 4 en cas d'erreur de récupération
  77. ; des retours de l'extension.
  78. ; 0 et @error à 5 si le fichier n'existe pas.
  79. ; 0 et @error à 6 si le paramètre $Parameters est mal
  80. ; formaté.
  81. ; 0 et @error à 7 si l'extension se ferme de façon
  82. ; innatendue.
  83. ; Notes : Si aucune fonction n'est appelé, alors seul la
  84. ; fonction appelé par _AAEInit() dans l'extension
  85. ; sera exécuté (si il y en a une).
  86. Func _AAECall ( $File, $Function = False, $Parameters = False)
  87. ; Vérifis si le fichier existe...
  88. If Not FileExists($File) Then Return SetError(5,0,0)
  89. ; Prépare la fonction...
  90. If Not $Function Then $Function = "false"
  91. ; Prépare les paramètres...
  92. Local $aArgs
  93. If UBound($Parameters) Then
  94. ; Cherche une erreur d'array...
  95. If $Parameters[0] <> "CallArgArray" Then Return SetError(6,0,0)
  96. $aArgs = '"'&(UBound($Parameters)-1)&'"'
  97. For $i = 1 To UBound($Parameters)-1 Step 1
  98. $Param = StringReplace($Parameters[$i],"\","\\ ")
  99. $Param = StringReplace($Param,'"','\a')
  100. $aArgs &= ' "'&$Param&'"'
  101. Next
  102. EndIf
  103. ; Cherche si le fichier d'extension est un executable...
  104. If StringRight($File,4) = ".exe" Then
  105. ; Supprime les fichiers de retour...
  106. $FileName = __FileGetName ( $File)
  107. FileDelete(@TempDir&"\"&$FileName&"_return.tmp")
  108. FileDelete(@TempDir&"\"&$FileName&"_error.tmp")
  109. ; Lance le processus...
  110. $PID = Run ( $File&" "&$aArgs&' "'&$Function&'"',@ScriptDir)
  111. While ProcessExists($PID)
  112. ; Pause pour éviter la surcharge du processeur.
  113. Sleep(100)
  114. WEnd
  115. ; Récupère les retours...
  116. $Return = FileRead(@TempDir&"\"&$FileName&"_return.tmp")
  117. $Error = FileRead(@TempDir&"\"&$FileName&"_error.tmp")
  118. ; Cherche une erreur de récupération...
  119. If $Return = "" Or $Error = "" Then Return SetError(4,0,0)
  120. ; Retourne les réponses...
  121. Return SetError($Error,0,$Return)
  122. ; Si le fichier d'extension n'est pas un executable...
  123. Else
  124. ; Cherche si le script qui appel l'extension est compilé...
  125. If @Compiled And StringRight(@ScriptName,4) <> ".a3x" Then
  126. ; Supprime les fichiers de retour...
  127. $FileName = __FileGetName ( $File)
  128. FileDelete(@TempDir&"\"&$FileName&"_return.tmp")
  129. FileDelete(@TempDir&"\"&$FileName&"_error.tmp")
  130. ; Lance le processus...
  131. $PID = Run ( @ScriptFullPath&" /AutoIt3ExecuteScript """&$File&""" "&$aArgs&' "'&$Function&'"',@ScriptDir)
  132. While ProcessExists($PID)
  133. ; Pause pour éviter la surcharge du processeur.
  134. Sleep(100)
  135. WEnd
  136. ; Récupère les retours...
  137. $Return = FileRead(@TempDir&"\"&$FileName&"_return.tmp")
  138. $Error = FileRead(@TempDir&"\"&$FileName&"_error.tmp")
  139. ; Cherche une erreur de récupération...
  140. If $Return = "" Or $Error = "" Then Return SetError(4,0,0)
  141. ; Retourne les réponses...
  142. Return SetError($Error,0,$Return)
  143. ; Si le script qui appel n'est pas compilé...
  144. Else
  145. ; Supprime les fichiers de retour...
  146. $FileName = __FileGetName ( $File)
  147. FileDelete(@TempDir&"\"&$FileName&"_return.tmp")
  148. FileDelete(@TempDir&"\"&$FileName&"_error.tmp")
  149. ; Lance le processus...
  150. $PID = Run ( @AutoItExe&" """&$File&""" "&$aArgs&' "'&$Function&'"',@ScriptDir)
  151. While ProcessExists($PID)
  152. ; Pause pour éviter la surcharge du processeur.
  153. Sleep(100)
  154. WEnd
  155. ; Récupère les retours...
  156. $Return = FileRead(@TempDir&"\"&$FileName&"_return.tmp")
  157. $Error = FileRead(@TempDir&"\"&$FileName&"_error.tmp")
  158. ; Cherche une erreur de récupération...
  159. If $Return = "" Or $Error = "" Then Return SetError(4,0,0)
  160. ; Retourne les réponses...
  161. Return SetError($Error,0,$Return)
  162. EndIf
  163. EndIf
  164. EndFunc
  165. ; Fonction : _AAEExit ( [$Return, [$Error]])
  166. ; Quitte une extension AAE.
  167. ; Paramètres : $Return : Code de retour de la fonction _AAECall()
  168. ; $Error : Code d'erreur de la fonction _AAECall()
  169. ; Retour : Aucun.
  170. Func _AAEExit ( $Return = 0, $Error = 0)
  171. ; Supprime l'appel de la fonction de fin de script...
  172. OnAutoItExitUnRegister("__AAEExitNotRequired")
  173. ; Supprime les fichiers de retours...
  174. FileDelete(@TempDir&"\"&@ScriptName&"_return.tmp")
  175. FileDelete(@TempDir&"\"&@ScriptName&"_error.tmp")
  176. ; Ecrit les retours...
  177. FileWrite(@TempDir&"\"&@ScriptName&"_return.tmp",$Return)
  178. FileWrite(@TempDir&"\"&@ScriptName&"_error.tmp", $Error)
  179. ; Quitte le script...
  180. Exit 0
  181. EndFunc
  182. #cs
  183. *
  184. * Fonctions à usage interne...
  185. *
  186. #ce
  187. ; Fonction : __FileGetName ( $File)
  188. ; Retourne un nom de fichier en fonction de son chemin d'accès.
  189. ; Paramètres : $File : Le chemin d'accès du fichier dont
  190. ; on souhite obtenir le nom.
  191. ; Retour : Le nom du fichier.
  192. Func __FileGetName ( $File)
  193. If Not StringInStr($File,"\") Then Return $File
  194. $Split = StringSplit($File,"\")
  195. Return $Split[$Split[0]]
  196. EndFunc
  197. ; Fonction : __AAEExitNotRequired()
  198. ; Redirige vers la fonction _AAEExit() en cas de fin de script innatendue.
  199. ; Paramètres : Aucun.
  200. ; Retour : Aucun.
  201. Func __AAEExitNotRequired()
  202. _AAEExit( 0, 7)
  203. EndFunc

comments powered by Disqus