Functions > ObjCOM >


ObjEvent

Traite les événements entrants de l'objet donné.

ObjEvent ( $ObjectVar, "functionprefix" [, "interface name"] )
ObjEvent ( "AutoIt.Error" [, "function"] )

Paramètres

$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.

Valeur de retour

Succès: Retourne un objet ou un nom de fonction.
Échec: Définit @error <> 0.

Remarques

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

Consultez Référence Obj/COM pour plus de détails.

En relation

GUICtrlCreateObj, IsObj, ObjCreate, ObjGet

Exemples

Exemple 1

#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

Exemple 2

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