Traite les événements entrants de l'objet donné.
ObjEvent ( $ObjectVar, "functionprefix" [, "interface name"] )
ObjEvent ( "AutoIt.Error" [, "function"] )
$ObjectVar | Variable contenant l'objet à partir duquel vous souhaitez recevoir des événements |
"functionprefix" | Le préfixe des fonctions que vous définissez pour traiter les événements reçus. Le préfixe est ajouté au nom des méthodes des objets. |
"interface name" | [optionnel] Nom d'une interface d'événement à utiliser. Remarque: Il doit être pris en charge comme un sortant pour l'Objet ET il doit être de type DISPATCH. |
Succès: | Retourne un objet ou un nom de fonction. |
Échec: | Définit @error <> 0. |
Le premier format est utilisé pour recevoir des événements de l'objet donné.
Pour recevoir un événement particulier, créez un nom de fonction AutoIt en utilisant le préfixe donné en annexe avec le nom de l'événement.
Le second format est utilisé pour gérer les erreurs COM.
Si une erreur COM se produit, la fonction donnée est appelée. Le premier paramètre de la fonction sera l'objet d'erreur.
Vous pouvez l'utiliser pour accéder aux propriétés différentes de cet objet.
Si le second paramètre est omis, la fonction retournera une chaîne contenant le nom de la fonction du gestionnaire d'erreur en cours. Si aucune fonction gestionnaire d'erreur a été installée, elle retournera une chaîne vide.
Propriétés de l'objet Erreur AutoIt:
.number | La valeur HRESULT de Windows d'un appel COM |
.windescription | Le texte FormatWinError() dérivé de .number |
.source | Nom de l'objet généré par l'erreur (contenu de ExcepInfo.source ) |
.description | Description de l'objet source de l'erreur (contenu de ExcepInfo.description) |
.helpfile | Le fichier d'aide de l'objet source de l'erreur (contenu de ExcepInfo.helpfile) |
.helpcontext | L'ID de contexte du fichier d'aide de l'objet de la source (contenu de ExcepInfo.helpcontext) |
.lastdllerror | Le nombre retourné par GetLastError() |
.scriptline | La ligne du script sur laquelle l'erreur est survenue |
GUICtrlCreateObj, IsObj, ObjCreate, ObjGet
#include <MsgBoxConstants.au3> Example() Func Example() ; Suivi d'erreur. Ce code piège toutes les erreurs COM pendant l'exécution. ; Cet objet particulier est déclaré Local, ce qui signifie qu'après le retour de la fonction, il n'existera plus. Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") ; Crée un objet Internet Explorer Local $oIE = ObjCreate("InternetExplorer.Application") ; Vérifie les erreurs If @error Then Return $oIE.Visible = True ; Définit la visibilité ; Objet sink personnel Local $oIEEvents = ObjEvent($oIE, "_IEEvent_", "DWebBrowserEvents2") ; Navigue quelque part $oIE.navigate("http://www.google.com/") ; Vérifie les erreurs lors du chargement If @error Then $oIE.Quit() Return EndIf ; Attend que la page se charge Do Sleep(10) Until $oIE.readyState = "complete" Or $oIE.readyState = 4 ; Provoque délibérément une erreur en appelant une méthode qui n'existe pas $oIE.PlayMeARockAndRollSong() ; Vérifie les erreurs If @error Then MsgBox($MB_SYSTEMMODAL, "COM Error", "@error is set to COM error number." & @CRLF & "@error = 0x" & Hex(@error)) ; Attend quelques secondes pour voir si d'autres événements seront déclenchés Sleep(3000) ; Rien de plus à faire. Ferme IE et retourne $oIE.Quit() #forceref $oErrorHandler, $oIEEvents EndFunc ;==>Example ; Définition de la méthode BeforeNavigate2 Func _IEEvent_BeforeNavigate2($oIEpDisp, $sIEURL, $iIEFlags, $sIETargetFrameName, $sIEPostData, $iIEHeaders, $bIECancel) ConsoleWrite("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!--BeforeNavigate2 fired--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " & @CRLF & _ "$oIEpDisp = " & $oIEpDisp() & " - " & ObjName($oIEpDisp) & @CRLF & _ ;par exemple la propriété et le nom par défaut de l'objet "$sIEURL = " & $sIEURL & @CRLF & _ "$iIEFlags = " & $iIEFlags & @CRLF & _ "$sIETargetFrameName = " & $sIETargetFrameName & @CRLF & _ "$sIEPostData = " & $sIEPostData & @CRLF & _ "$iIEHeaders = " & $iIEHeaders & @CRLF & _ "$bIECancel = " & $bIECancel & @CRLF & _ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " & @CRLF & @CRLF) EndFunc ;==>_IEEvent_BeforeNavigate2 ; La fonction d'erreur COM de l'utilisateur. Sera appelée en cas d'erreur COM Func _ErrFunc($oError) ; Faire quelque chose ici. ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _ @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _ @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _ @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _ @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _ @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _ @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _ @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _ @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _ @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF) EndFunc ;==>_ErrFunc
Global $__g_oTemplateCOMErrorHandler = 0 Local $oShell = ObjCreate("Shell.Application") ; Traite les appels susceptibles d'entraîner une erreur fatale ; Ce qui suit ne provoque pas d'erreur fatale, définit @error comme dans 3.3.11.0 Template_COMErrorRegister() $oShell.InvalidFunction() If @error Then MsgBox(4096, "COM Error Detected", @error) Template_COMErrorUnregister() ; Ce qui suit provoque une erreur fatale, la 2nd ligne ne sera pas exécutée. $oShell.InvalidFunction() If @error Then MsgBox(4096, "COM Error Detected", @error) Func Template_COMErrorRegister() $__g_oTemplateCOMErrorHandler = ObjEvent("AutoIt.Error", "Template_COMErrFunc") EndFunc ;==>Template_COMErrorRegister Func Template_COMErrorUnregister() $__g_oTemplateCOMErrorHandler = 0 EndFunc ;==>Template_COMErrorUnregister Func Template_COMErrFunc() ; Ne rien faire de spécial, il suffit de vérifier @error après les fonctions suspectes EndFunc ;==>Template_COMErrFunc