; 例子脚本, 演示 COM 事件函数的用法
; 需要至少 AutoIt 测试版
3.1.1.104 !
;
; 参阅: http://msdn.microsoft.com/workshop/browser/webbrowser/reference/objects/internetexplorer.asp

; 使用一个非常简单的 GUI 显示事件的结果.
#include "GUIConstantsEx.au3"
$GUIMain=GUICreate              ( "事件测试",       600,500 )
$GUIEdit=GUICtrlCreateEdit      ( "测试记录:" & @CRLF,  10, 20, 580, 400)
$GUIProg=GUICtrlCreateProgress  (                       10,  5, 580,  10)
$GUIExit=GUICtrlCreateButton    ( "关闭",          250, 450, 80,  30)
GUISetState ()       ;Show GUI

; 准备 IE 浏览器作为测试主题
$oIE=ObjCreate("InternetExplorer.Application.1")
With $oIE
    .Visible=1
    .Top = (@DesktopHeight-400)/2
    .Height=400         ; 使浏览器比我们的 GUI 稍微小一点.
    .Width=600
    .Silent=1           ; 不显示 IE 的对话框
    $IEWnd=HWnd(.hWnd)  ; 记住窗口状态, 以防万一用户将其关闭
EndWith

; 为 IE 浏览器选择特定的接口 'DWebBrowserEvents' because the IE is subject
; 因为 IE 受制于 Visual Studio 与 Adobe Acrobat Reader 软件的修改.
; 如果你已安装 IE 插件,AutoIt 可能不能自动寻找到正确的接口.
$EventObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
if @error then
   Msgbox(0,"AutoIt COM 测试", _
    "ObjEvent: 不能使用事件接口 'DWebBrowserEvents'. 错误代码: " & hex(@error,8))
   exit
endif

; 现在开始加载实例网页.
$URL = "http://www.AutoItScript.com/"
$oIE.Navigate( $URL )          
sleep(1000)             ; 给网页的加载时间

GUISwitch ( $GUIMain )  ; 切转到我们的 GUI, 以防万一 IE 窃取焦点

; 等候用户关闭 GUI.
While 1
   $msg = GUIGetMsg()
   If $msg = $GUI_EVENT_CLOSE or $msg = $GUIExit Then ExitLoop
Wend

$EventObject.Stop   ; 告诉 IE 我们不接收事件.
$EventObject=0      ; 取消事件对象
If WinExists($IEWnd) then $oIE.Quit     ; 关闭 IE 窗口
$oIE=0              ; 从内存中移除 IE (不是必需的).

GUIDelete ()        ; 删除 GUI

exit                ; 结束我们的演示.

; 一些 IE 事件函数
; 参阅: http://msdn.microsoft.com/workshop/browser/webbrowser/reference/objects/webbrowser.asp

Func IEEvent_BeforeNavigate($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)
;   注意: 申明的内容与 MSDN 的叙述不同.
    GUICtrlSetData ( $GUIEdit, "定位之前: " & $URL & " 标志: " & $Flags & " 框架: " & $TargetFrameName & " 动态地址: " & $PostData & " 标题: " & $Headers & " 删除: " & $Cancel  & @CRLF  , "附加" )
EndFunc

Func IEEvent_ProgressChange($Progress,$ProgressMax)
    If $ProgressMax > 0 Then
        GUICtrlSetData($GUIProg, ($Progress * 100) / $ProgressMax )
    EndIf
EndFunc

Func IEEvent_StatusTextChange($Text)
    GUICtrlSetData ( $GUIEdit, "IE 状态文本改变为: " & $Text & @CRLF  , "附加" )
EndFunc

Func IEEvent_PropertyChange( $szProperty)
    GUICtrlSetData ( $GUIEdit, "IE 改变特性后的值: " & $szProperty & @CRLF  , "附加" )
EndFunc

Func IEEvent_DownloadComplete()
    GUICtrlSetData ( $GUIEdit, "IE 完成导航操作" & @CRLF  , "附加" )
EndFunc

Func IEEvent_NavigateComplete($URL)  
;   注意: 说明的内容与 MSDN 的叙述不同.
    GUICtrlSetData ( $GUIEdit, "IE 加载 URL 完成: " & $URL & @CRLF  , "附加" )
EndFunc

Func IEEvent_($EventName)  
; 这是捕捉未定义事件的一个可选事件函数.
; 参数包含被调用事件的名字
.
    GUICtrlSetData ( $GUIEdit, "未捕捉事件: " & $EventName & @CRLF  , "附加" )
EndFunc
provider with jb51.net (unicode)