Funktionreferenz


ObjEvent

Beschreibung anzeigen in

Verarbeitet eingehende Ereignisse von dem angegebenen Objekt.

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

Parameter

$ObjectVar Eine Variable die das Objekt enthält von dem man die Ereignisse empfangen möchte
"functionprefix" Der Präfix der Funktionen die man festlegt um die eingehenden Ereignisse zu verarbeiten.
Der Präfix ist dem Objekt-Methodenamen vorangestellt.
"interface name" [optional] Name einer Ereignis-Schnittstelle die benutzt werden soll.
Merke: Es muss für das Objekt als ausgehend unterstützt werden UND es muss vom Typ DISPATCH sein.

Rückgabewert

Erfolg: Ein Objekt oder ein Funktionsname.
Fehler: Setzt das @error Flag auf ungleich null.

Bemerkungen

Das erste Format wird genutzt um die Ereignisse vom angegebenen Objekt abzurufen.
Um ein bestimmtes Ereignis abzurufen, erstellt man eine AutoIt-Funktion deren Namen aus dem
angegebenen Präfix und nachfolgendem Ereignisnamen besteht.

Das zweite Format wird für das COM Error Handling genutzt. Sollte irgendein COM-Fehler
auftreten, wird die angegebene Funktion aufgerufen. Der erste Parameter für diese Funktion ist das Fehler-Objekt. Es kann benutzt werden, um auf verschiedene Eigenschaften dieses Objektes zuzugreifen.
Wenn der zweite Parameter weggelassen wird, wird ein String zurückgegeben, die den Namen der aktuellen Fehlerbehandlungsfunktion enthält.
Wenn keine Fehlerbehandlungsfunktion festgelegt wurde, wird ein leerer String zurückgegeben.

Eigenschaften des AutoIt Fehler Objektes:

.number Der Wert von (Windows)HRESULT vom COM Aufruf
.windescription Der Text von FormatWinError() abgeleitet von .number
.source Names des Objekt das den Fehler auslöst (aus ExcepInfo.source)
.description Beschreibung des Fehlers vom Fehlerobjekt (aus ExcepInfo.description)
.helpfile Hilfefile für den Fehler vom Fehlerobjekt (aus ExcepInfo.helpfile)
.helpcontext Hilfefile Context ID Nummer vom Fehlerobjekt (aus ExcepInfo.helpcontext)
.lastdllerror Rückgabewert von GetLastError()
.scriptline Die Zeile des Scripts das den Fehler auslöste


Siehe die Obj/COM Referenz für detaillierte Erkärungen.

Verwandte Funktionen

GUICtrlCreateObj, IsObj, ObjCreate, ObjGet

Beispiel

Beispiel 1

#include <MsgBoxConstants.au3>

_Example()

Func _Example()

    ; Fehlerabfrage. Alle COM Errors werden aufgehalten solange sie existieren.
    ; Da dieses Object als Lokal deklariert wird, ist es nicht mehr vorhanden nachdem die Funktion ausgeführt wurde (Return).
    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

    ; Erstellt ein Internet Explorer Object
    Local $oIE = ObjCreate("InternetExplorer.Application")
    ; Überprüft auf Fehler
    If @error Then Return

    $oIE.Visible = True ; Setzt die Sichtbarkeit auf 'True'

    ; Eigenes Abfluss Object (empfängt Events)
    Local $oIEEvents = ObjEvent($oIE, "_IEEvent_", "DWebBrowserEvents2")

    ; Ruft eine Adresse ab
    $oIE.navigate("http://www.google.de/")
    ; Auf Fehler überprüfen während die Seite geladen wird
    If @error Then
        $oIE.Quit()
        Return
    EndIf

    ; Warten bis die Seite fertig geladen wurde
    While 1
        If $oIE.readyState = "complete" Or $oIE.readyState = 4 Then ExitLoop
        Sleep(10)
    WEnd

    ; Verursacht absichtlich einen Fehler durch Aufruf einer nicht existierenden Methode
    $oIE.PlayMeARockAndRollSong()
    ; Auf Fehler überprüfen
    If @error Then MsgBox(48 + 262144, "COM Error", "@error wurde auf die COM Error Nummer gesetzt." & @CRLF & "@error = 0x" & Hex(@error))

    ; Wartet für ein paar Sekunden um eventuelle Events abzufangen
    Sleep(3000)

    ; Nichts mehr zu tun. Schließt den IE und kehrt von der Funktion zurück
    $oIE.Quit()

    #forceref $oErrorHandler, $oIEEvents
EndFunc   ;==>_Example


; BeforeNavigate2 Methoden-definition
Func _IEEvent_BeforeNavigate2($oIEpDisp, $sIEURL, $sIEFlags, $sIETargetFrameName, $sIEPostData, $iIEHeaders, $bIECancel)
    ConsoleWrite("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!--BeforeNavigate2 wurde aufgerufen--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " & @CRLF & _
            "$oIEpDisp = " & $oIEpDisp() & "  -  " & ObjName($oIEpDisp) & @CRLF & _ ; z.B. Standard Eigenschaft und Name des Objekts
            "$sIEURL = " & $sIEURL & @CRLF & _
            "$sIEFlags = " & $sIEFlags & @CRLF & _
            "$sIETargetFrameName = " & $sIETargetFrameName & @CRLF & _
            "$sIEPostData = " & $sIEPostData & @CRLF & _
            "$iIEHeaders = " & $iIEHeaders & @CRLF & _
            "$bIECancel = " & $bIECancel & @CRLF & _
            "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " & @CRLF & @CRLF)
EndFunc   ;==>_IEEvent_BeforeNavigate2

; COM Error Funktion des Benutzers. Wird bei jedem COM Error aufgerufen
Func _ErrFunc($oError)
    ; Macht irgendwas hier.
    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

Beispiel 2

Global $__g_oTemplateCOMErrorHandler = 0

Local $oShell = ObjCreate("Shell.Application")

; Wrap calls that are likely to fatal error

; This won't fatal error, it will set @error as in 3.3.11.0
Template_COMErrorRegister()
$oShell.InvalidFunction()
If @error Then MsgBox(4096, "COM Error Detected", @error)
Template_COMErrorUnregister()

; This will fatal error, the 2nd line will not be reached.
$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()
    ; Do nothing special, just check @error after suspect functions.
EndFunc   ;==>Template_COMErrFunc