; 例子脚本, 演示 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)