找回密码
 加入
搜索
查看: 3387|回复: 7

[IE类操作] 嵌入浏览器强制在本窗口浏览问题

  [复制链接]
发表于 2010-12-15 07:30:56 | 显示全部楼层 |阅读模式
嵌入的ie在浏览一些网页时会自动启动默认浏览器,而不是在嵌入窗口浏览,如何解决?
发表于 2010-12-15 11:22:34 | 显示全部楼层
没有办法的办法
------------------------------------------------------
在启动嵌入ie时,先注册为缺省浏览器
;
;------->浏览网页<-------
;
嵌入ie在退出前,恢复缺省浏览器的值
-------------------------------------------------
没写过,也没试过,仅经参考!
发表于 2010-12-15 11:49:32 | 显示全部楼层
#include "GUIConstantsEx.au3"
#include <IE.au3>
#include <Misc.au3>
Dim $Text,$Text2="",$URL = "http://www.baidu.com/"
$dll = DllOpen("user32.dll")
$GUIMain=GUICreate              ( "Event Test",       800,600 )
$GUIEdit=GUICtrlCreateEdit      ( "Test Log:" & @CRLF,  10, 20, 780, 270)
$StateLab = GUICtrlCreateLabel("Label1", 8, 288, 780, 17)
GUISetState ()
$oIE = _IECreateEmbedded ()
GUICtrlCreateObj($oIE,8, 320, 780, 320)
$EventObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
if @error then exit Msgbox(0,"错误!","不可使用COM接口 'DWebBrowserEvents'. 错误代码: " & hex(@error,8))
$Timer = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
$TimerDLL = DllCall($dll, "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 10, "ptr", DllCallbackGetPtr($Timer))
$oIE.Navigate( $URL )           
sleep(1000)            
GUISwitch ( $GUIMain )  
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)
                DllClose($dll)
                Exit  
        EndIf
        ;这里你可以自己检测鼠标点击的是什么控件,按你的要求做相应的响应。
           If _IsPressed("1", $dll) And WinActive($GUIMain) Then
                ;我测试用延迟不管用。必须用MSGBOX断下程序执行。然后才能正常。
        MsgBox(0,"提示", "End Key Pressed",10)
                If $Text2<>"" Then $oIE.Navigate( $Text2 )     
        EndIf
Wend
;其实例子中那么多函数,真正要用到的只有这个。
Func IEEvent_StatusTextChange($Text)
    If $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("提示") Then
                WinMove("提示","",@DesktopWidth,@DesktopHeight,0,0,1)
                Send("{Enter}")
        EndIf
EndFunc

这是曾经论坛中的一个例子。不知道能帮到LZ不。。。
 楼主| 发表于 2010-12-15 12:42:18 | 显示全部楼层
多谢关注,不过首先修改默认浏览器这个恐怕不行,因为有的网页是新建窗口,即使改成默认浏览器也会启动新进程。上面这段代码我看了一下,响应鼠标事件我是用插入脚本事件实现的。通过判断状态是否是有效浏览地址进行浏览,但是还是无法控制创建新窗口。
 楼主| 发表于 2010-12-21 12:27:38 | 显示全部楼层
分析了一下网页代码,一般网页弹出新窗口,使用window.open和target=blank把它俩做掉就好了。代码量比较小
发表于 2010-12-21 14:27:43 | 显示全部楼层
本帖最后由 78391493 于 2010-12-21 14:29 编辑

拦截$oIE的NewWindow3 Event,有个bstrUrl参数自己处理
http://msdn.microsoft.com/en-us/library/aa768337(v=vs.85).aspx
 楼主| 发表于 2010-12-21 21:43:11 | 显示全部楼层
我看过这个了,不过我发现总是在新窗口创建完后才会响应NEWWINDOW函数,没法拦截啊
 楼主| 发表于 2010-12-23 07:42:56 | 显示全部楼层
IEEvent_NewWindow在嵌入式窗口屏蔽新窗口不给力的新方法帖有代码
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-18 14:40 , Processed in 0.082069 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表