Verarbeitet eingehende Ereignisse von dem angegebenen Objekt.
ObjEvent ( $ObjectVar, "functionprefix" [, "interface name"] )
ObjEvent ( "AutoIt.Error" [, "function"] )
$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. |
Erfolg: | Ein Objekt oder ein Funktionsname. |
Fehler: | Setzt das @error Flag auf ungleich null. |
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 |
GUICtrlCreateObj, IsObj, ObjCreate, ObjGet
#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
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