@@SyntaxHighlighting@@ ; Example script, showing the usage of COM Event functions. ; ; See also: http://msdn.microsoft.com/en-us/library/aa768400.aspx ; We use a very simple GUI to show the results of our Events. #include #include Global $g_idGUIEdit, $g_idGUIProg Example() Exit ; End of our Demo. Func Example() Local $hGUIMain = GUICreate("Event Test", 600, 500) $g_idGUIEdit = GUICtrlCreateEdit("Test Log:" & @CRLF, 10, 20, 580, 400) $g_idGUIProg = GUICtrlCreateProgress(10, 5, 580, 10) Local $idGUIExit = GUICtrlCreateButton(" Close ", 250, 450, 80, 30) GUISetState() ;Show GUI ; We prepare the Internet Explorer as our test subject Local $oIE = ObjCreate("InternetExplorer.Application.1") With $oIE .Visible = 1 .Top = (@DesktopHeight - 400) / 2 .Height = 400 ; Make it a bit smaller than our GUI. .Width = 600 .Silent = 1 ; Don't show IE's dialog boxes Local $hIEWnd = HWnd(.hWnd) ; Remember the Window, in case user decides to close it EndWith ; We choose for a specific Internet Explorer interface 'DWebBrowserEvents' because the IE is subject ; to modifications by e.g. Visual Studio and Adobe Acrobat Reader. If you have IE-plugins installed, ; AutoIt might not be able to find the correct interface automatically. Local $oEventObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents") If @error Then MsgBox($MB_OK, "AutoIt COM Test", _ "ObjEvent: Can't use event interface 'DWebBrowserEvents'. Error code: " & Hex(@error, 8)) Exit EndIf ; Now starting to load an example Web page. Local $sURL = "http://www.AutoItScript.com/" $oIE.Navigate($sURL) Sleep(1000) ; Give it some time to load the web page GUISwitch($hGUIMain) ; Switch back to our GUI in case IE stole the focus ; Waiting for user to close the GUI. Local $iMsg While 1 $iMsg = GUIGetMsg() If $iMsg = $GUI_EVENT_CLOSE Or $iMsg = $idGUIExit Then ExitLoop WEnd $oEventObject.Stop ; Tell IE we don't want to receive events. $oEventObject = 0 ; Kill the Event Object If WinExists($hIEWnd) Then $oIE.Quit ; Close IE Window $oIE = 0 ; Remove IE from memory (not really necessary). GUIDelete() ; Remove GUI EndFunc ;==>Example ; A few Internet Explorer Event Functions ; See also: http://msdn.microsoft.com/en-us/library/aa768400.aspx Func IEEvent_BeforeNavigate($sURL, $iFlags, $sTargetFrameName, $dPostData, $sHeaders, $bCancel) ; Note: the declaration is different from the one on MSDN. GUICtrlSetData($g_idGUIEdit, "BeforeNavigate: " & $sURL & " Flags: " & $iFlags & " tgframe: " & $sTargetFrameName & " Postdat: " & $dPostData & " Hdrs: " & $sHeaders & " canc: " & $bCancel & @CRLF, "append") EndFunc ;==>IEEvent_BeforeNavigate Func IEEvent_ProgressChange($iProgress, $iProgressMax) If $iProgressMax > 0 Then GUICtrlSetData($g_idGUIProg, ($iProgress * 100) / $iProgressMax) EndIf EndFunc ;==>IEEvent_ProgressChange Func IEEvent_StatusTextChange($sText) GUICtrlSetData($g_idGUIEdit, "IE Status text changed to: " & $sText & @CRLF, "append") EndFunc ;==>IEEvent_StatusTextChange Func IEEvent_PropertyChange($szProperty) GUICtrlSetData($g_idGUIEdit, "IE Changed the value of the property: " & $szProperty & @CRLF, "append") EndFunc ;==>IEEvent_PropertyChange Func IEEvent_DownloadComplete() GUICtrlSetData($g_idGUIEdit, "IE has finished a navigation operation" & @CRLF, "append") EndFunc ;==>IEEvent_DownloadComplete Func IEEvent_NavigateComplete($sURL) ; Note: the declaration is different from the one on MSDN. GUICtrlSetData($g_idGUIEdit, "IE has finished loading URL: " & $sURL & @CRLF, "append") EndFunc ;==>IEEvent_NavigateComplete Func IEEvent_($sEventName) ; This is an optional event function to catch non-defined events. ; The parameter contains the name of the event being called. GUICtrlSetData($g_idGUIEdit, "Uncatched event: " & $sEventName & @CRLF, "append") EndFunc ;==>IEEvent_ @@End@@