#include "GUIConstantsEx.au3"
#include "GUIConstantsEx.au3"
#include <IE.au3>
#include <Misc.au3>
#include <WinAPI.au3>
Global Const $HandCursorID=0X0001001F
Dim $Text,$Text2="",$URL = "http://www.baidu.com/"
$dll = DllOpen("user32.dll") ;打开指定的DLL文件以供DllCall()函数调用
$GUIMain=GUICreate ( "Event Test", 800,600 );创建主窗口
$GUIEdit=GUICtrlCreateEdit ( "Test Log:" & @CRLF, 10, 20, 780, 270) ;在主窗口上创建一个Edit控件
;这个Edit控件应该是显示事件的日志信息
$StateLab = GUICtrlCreateLabel("Label1", 8, 288, 780, 17) ;在主窗口上创建一个静态标签控件
;这个标签难道是:当鼠标在不同的连接地址移动时,获得连接地址上的文字?
GUISetState () ;显示当前窗口
$oIE = _IECreateEmbedded ();创建一个适合于内嵌在AU3的图形化界面的浏览器对象,该图形化界面必须是由GUICtrlCreateObj()建立
GUICtrlCreateObj($oIE,8, 320, 780, 320) ;创建适合浏览器对象内嵌的图形化界面
$EventObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents") ;包含一个已经得到的对象(object)的事件句柄
;IEEvent 函数前缀,用来处理收到的事件
;DWebBrowserEvents 接口名称
if @error then exit Msgbox(0,"错误!","不可使用COM接口 'DWebBrowserEvents'. 错误代码: " & hex(@error,8))
$Timer = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
;DllCallbackRegister() 创建一个用户自定义的回调函数
;语法:DllCallbackRegister ( "函数名", "返回类型", "参数" )
$TimerDLL = DllCall($dll, "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 100, "ptr", DllCallbackGetPtr($Timer))
;DllCall() 调用指定Dll文件里面的函数
;语法 :DllCall ( "dll", "返回值类型", "函数名称" [, "类型1", 参数1[, "类型n", 参数n]] )
;DllCallbackGetPtr($Timer) 返回回调函数的指针,可以用于传递给一个WIN32 API
$oIE.Navigate( $URL ) ;打开指定连接地址
sleep(1000)
GUISwitch ( $GUIMain ) ;切换用于GUI函数“当前”的窗口
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then
$EventObject.Stop ; 不再接收事件
$EventObject=0 ; 关闭Event Object
$oIE=0 ; 清除内存
GUIDelete ()
DllCall($dll, "int", "KillTimer", "hwnd", 0, "uint", $TimerDLL)
DllCallbackFree($Timer) ;清除先前由DllCallbackRegister()创建的句柄
DllClose($dll) ;将先前打开的User32.dll文件关闭
Exit
EndIf
;这里你可以自己检测鼠标点击的是什么控件,按你的要求做相应的响应。
$cursor = _WinAPI_GetCursorInfo()
If $cursor[0]=False Then Exit MsgBox(16,"错误!","获取鼠标信息失败!")
If $cursor[2]=$HandCursorID Then
If _IsPressed("1", $dll) And WinActive($GUIMain) Then
;_IsPressed("1", $dll) 检查按键是否被按下,1表示按下,反之0。
;我测试用延迟不管用。必须用MSGBOX断下程序执行。然后才能正常。
WinSetOnTop($GUIMain,"",1)
;设定指定窗口总是在顶层,1表示在顶层
;语法:WinSetOnTop ( "窗口标题", "窗口文本", 标志 )
MsgBox(0,"IE内嵌不新建IE窗口", "0",1,WinGetHandle("Program Manager"))
WinSetOnTop($GUIMain,"",0)
If $Text2<>"" Then $oIE.Navigate( $Text2 )
EndIf
EndIf
Wend
;其实例子中那么多函数,真正要用到的只有这个。
Func IEEvent_StatusTextChange($Text)
If $Text<>'' And $Text<>'完成' And $Text<>'完毕' Then GUICtrlSetData ( $GUIEdit, "IE Status text changed to: " & $Text & @CRLF , "append" )
If $Text<>'' And StringLeft($Text,4)="http" Then $Text2=$Text
GUICtrlSetData($StateLab,$Text)
EndFunc
Func Timer($hWnd, $uiMsg, $idEvent, $dwTime)
If WinExists("IE内嵌不新建IE窗口") Then
WinMove("IE内嵌不新建IE窗口","",@DesktopWidth,@DesktopHeight,0,0,1)
Send("{Enter}")
EndIf
EndFunc