找回密码
 加入
搜索
楼主: lynfr8

[IE类操作] 内嵌IE不弹出新窗口[新成果+讨论]

 火... [复制链接]
发表于 2010-7-7 18:47:58 | 显示全部楼层
本帖最后由 woeiwoei 于 2010-7-8 09:35 编辑

回复  newuser

#include <GUIConstantsEx.au3>
#include <IE.au3>
$oIE = _IECreateEmbedded ()
$IECreate=GUICreate("Web Test",1024, 460, -1, -1 )
$GUIActiveX = GUICtrlCreateObj($oIE, 3, 3, 1000, 400)
GUISetState()  
$starturl=_IENavigate ($oIE, "http://www.baidu.com")

While 1
    $msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE  Then
        Exit
EndIf
WEnd



这是最简单的例子~~不知道是你要的不 ~~  额 刚点错了。。咋敢回复给 C.L大大呀、、、
 楼主| 发表于 2010-7-7 21:46:04 | 显示全部楼层
你说的问题和我自己遇到的问题已解决。 可是又出来个问题。IEEvent_StatusTextChange这个函数对中文支持不好 ...
lanfengc 发表于 2010-7-7 10:10



    实测结果新窗口还是会跳出来
发表于 2010-7-8 08:24:01 | 显示全部楼层
14l 实测结果新窗口还是会跳出来
发表于 2010-7-8 10:37:53 | 显示全部楼层
回复 17# lynfr8


    哪个网站的? 发来我看看源代码。  我个人测试没问题。 IE7 和IE6都测试了。 不会弹出,就是windows 2003 下的IE6中文支持不好, 只要链接有中文就出现乱码
发表于 2010-7-8 11:42:56 | 显示全部楼层
我正需要这种资料啊,收藏了
发表于 2010-7-8 12:18:23 | 显示全部楼层
我这测试Win7 IE8 也没问题。
发表于 2010-7-8 12:40:04 | 显示全部楼层
newwindow 事件只会在窗口出现时才触发,比较麻烦啊
发表于 2010-7-8 12:43:40 | 显示全部楼层
简单点写,不过没有在窗口出现之前的事件,还是会闪一下
#include <IE.au3>
_IEErrorHandlerRegister()
Global $Str,$oIE = _IECreateEmbedded()
ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
GUICreate("test",700,600,(@DesktopWidth -700)/2,(@DesktopHeight -600)/2)
GUICtrlCreateObj($oIE,0,0,700,600)
_IENavigate($oIE,"http://www.google.com.hk")
GUISetState()

While 1
        $msg = GUIGetMsg()
        If $msg = -3 Then Exit
WEnd

Func IEEvent_NewWindow($ppDisp,$Cancel)
        Local $oResult = _IEAttach($Str, "url") ;获取对象
        _IEQuit($oResult) ;结束对象
        _IENavigate($oIE,$Str) 
EndFunc

Func IEEvent_StatusTextChange($Text)
    $Str = $Text
EndFunc

评分

参与人数 1金钱 +6 贡献 +2 收起 理由
lynfr8 + 6 + 2

查看全部评分

发表于 2010-7-8 13:16:16 | 显示全部楼层
本帖最后由 风行者 于 2010-7-8 13:21 编辑

再精简一点
#include <IE.au3>
_IEErrorHandlerRegister()
Global $oIE = _IECreateEmbedded()
ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
GUICreate("test",700,600,(@DesktopWidth -700)/2,(@DesktopHeight -600)/2)
GUICtrlCreateObj($oIE,0,0,700,600)
_IENavigate($oIE,"http://www.google.com.hk")
GUISetState()

While 1
        $msg = GUIGetMsg()
        If $msg = -3 Then Exit
WEnd

Func IEEvent_NewWindow($ppDisp,$Cancel)
                _IENavigate($oIE,$ppDisp,0) 
        Local $oResult = _IEAttach($ppDisp, "url") ;获取对象
        _IEQuit($oResult) ;结束对象
EndFunc

评分

参与人数 1金钱 +35 贡献 +5 收起 理由
lynfr8 + 35 + 5

查看全部评分

发表于 2010-7-8 13:28:23 | 显示全部楼层
回复 24# 风行者


    还是没有我写的效果好。 呵呵,不过我从你的代码种学到了IEEvent_NewWindow 还可以这样用。
发表于 2010-7-8 14:20:14 | 显示全部楼层
学习................
发表于 2010-7-8 14:59:30 | 显示全部楼层
下載來看看...學習學習.... 感謝 分享.....

多謝提供 UDF 有您的分享....使得大家更方便了.....



===========================================

感謝 分享原碼......有您的分享....AU3 可以更進步的.....

===========================================
发表于 2010-7-8 19:15:33 | 显示全部楼层
还是lynfr8的力量大,振臂一呼,高手出现了。
lanfengc的代码很棒!直接甩掉了NewWindow事件。NewWindow事件中IE的弹出貌似不可避免,出现后禁止也好,隐藏出好,始终会闪。而且我测试中发现终止IE进程不是一个太好的方法,会导致GUI装载新页面极其缓慢。
lanfengc的方法是在循环中通过按键判断新网页打开的条件,然后再将提示挪到桌面之外。由于没有NewWindow事件,也就不会弹出IE窗口了,不知道这个理解对不对。
但lanfengc只有第一次发的代码可以,后面修改后的都不行,增加了对鼠标手形的判断,是不是$HandCursorID=0X0001001F 这个定义有误啊?所以循环里的If $cursor[2]=$HandCursorID Then 失效了。
学习,并向pusofalse版主,元老及各位不悋赐教的高手致敬。
发表于 2010-7-8 20:01:51 | 显示全部楼层
奇怪 我测试的一点问题都没有呢。
发表于 2010-7-9 09:13:47 | 显示全部楼层
刚在网上查了些资料。又做了测试。
把lanfengc后面的代码修改一下:
循环里这个位置:
------------------------------------------------------
;这里你可以自己检测鼠标点击的是什么控件,按你的要求做相应的响应。
          $cursor = _WinAPI_GetCursorInfo()
           If $cursor[2]=65581 And _IsPressed("1", $dll) And WinActive($GUIMain) Then
                ;我测试用延迟不管用。必须用MSGBOX断下程序执行。然后才能正常。
        MsgBox(0,"提示", "End Key Pressed",10)
                If $Text2<>"" Then $oIE.Navigate( $Text2 )     
        EndIf
-----------------------------------------------------------------
再把代码开始的
Global Const $HandCursorID=0X0001001F
这一行删掉。
65553是普通光标  65581是手型光标。
当条件是手型光标且被点击时触发oIE.Navigate

lanfengc的代码全部如下:
#include "GUIConstantsEx.au3"
#include <IE.au3>
#include <Misc.au3>
#include <WinAPI.au3>

Dim $Text,$Text2="",$URL = "http://site.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
        ;这里你可以自己检测鼠标点击的是什么控件,按你的要求做相应的响应。
                $cursor = _WinAPI_GetCursorInfo()
           If $cursor[2]=65581 And _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

评分

参与人数 1金钱 +48 贡献 +5 收起 理由
lynfr8 + 48 + 5

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 21:03 , Processed in 0.070587 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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