Page 1 of 1

【已解决】Gui加载IE,如何处理弹出式网页?

Posted: 27 May 2015, 04:21
by youwantme
比如:

Code: Select all


Gui, Margin, 0, 0
Gui Add, ActiveX, w800 h500 vWB, Shell.Explorer
Gui, Show
WB.Navigate("http://internet.baidu.com/")


点击百度新闻里面的新闻链接,就会另外弹出一个网页,但这个网页已经不在那个 Gui 范围内了。。。。

我想继续在Gui中浏览下一级网页,请问该如何处理?

感谢!

Re: Gui加载IE,如何处理弹出式网页?

Posted: 27 May 2015, 14:37
by tmplinshi

Code: Select all

Gui, Margin, 0, 0
Gui Add, ActiveX, w800 h500 vWB, Shell.Explorer
Gui, Show
ComObjConnect(WB, WB_events)
WB.Silent := True ; 这一句可以避免一些网页弹出脚本错误
WB.Navigate("http://internet.baidu.com/")
Return

class WB_events
{
    NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl) 
    {
        global WB
        cancel[] := true ; 取消弹出新窗口
        WB.Navigate(bstrUrl)
    }
}

GuiClose:
ExitApp

Re: Gui加载IE,如何处理弹出式网页?

Posted: 27 May 2015, 19:17
by youwantme
非常感谢!顺带把我关于如何屏蔽网页脚本错误的疑问也一并解决了。
tmplinshi wrote:

Code: Select all

Gui, Margin, 0, 0
Gui Add, ActiveX, w800 h500 vWB, Shell.Explorer
Gui, Show
ComObjConnect(WB, WB_events)
WB.Silent := True ; 这一句可以避免一些网页弹出脚本错误
WB.Navigate("http://internet.baidu.com/")
Return

class WB_events
{
    NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl) 
    {
        global WB
        cancel[] := true ; 取消弹出新窗口
        WB.Navigate(bstrUrl)
    }
}

GuiClose:
ExitApp

Re: Gui加载IE,如何处理弹出式网页?

Posted: 27 May 2015, 20:11
by youwantme
运行代码时,提醒这一句出错:

cancel[] := true ; 取消弹出新窗口

提示信息为:Error: 0x8002000E - 无效的参数数目

运行结果是:弹出网页在原wb控件打开了,但是网页也弹出来了,也就是取消弹出新窗口没生效。

能否麻烦兄台帮忙看一下是什么原因?谢啦!

tmplinshi wrote:

Code: Select all

Gui, Margin, 0, 0
Gui Add, ActiveX, w800 h500 vWB, Shell.Explorer
Gui, Show
ComObjConnect(WB, WB_events)
WB.Silent := True ; 这一句可以避免一些网页弹出脚本错误
WB.Navigate("http://internet.baidu.com/")
Return

class WB_events
{
    NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl) 
    {
        global WB
        cancel[] := true ; 取消弹出新窗口
        WB.Navigate(bstrUrl)
    }
}

GuiClose:
ExitApp

Re: Gui加载IE,如何处理弹出式网页?

Posted: 28 May 2015, 00:30
by youwantme
这个问题我已经在其他网站找到了解决办法,亲测通过,转述如下:

cancel := true 是错误的写法,true在com里是-1,cancel是short不是int,所以应该是:

NumPut(-1, ComObjValue(Cancel), "short")


完整的可用代码为:

Code: Select all


Gui, Margin, 0, 0
Gui Add, ActiveX, w800 h500 vWB, Shell.Explorer
Gui, Show
ComObjConnect(WB, WB_events)
WB.Silent := True ; 这一句可以避免一些网页弹出脚本错误
WB.Navigate("http://internet.baidu.com/")
Return
 
class WB_events
{
    NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl) 
    {
        global WB
	NumPut(-1, ComObjValue(Cancel), "short") ; 取消弹出新窗口
        WB.Navigate(bstrUrl)
    }
}
 
GuiClose:
ExitApp


Re: Gui加载IE,如何处理弹出式网页?

Posted: 28 May 2015, 01:28
by tmplinshi
好吧,看来我以后回复还是得尽量啰嗦一点。。cancel[] := true 需要 AHK 版本 v1.1.17 以上。
话说,你们都不用最新版的啊。。我看到有新版,都会去看看更新了什么内容,并立即下载更新的。

Re: Gui加载IE,如何处理弹出式网页?

Posted: 28 May 2015, 02:30
by youwantme
啊。。。原来是这个原因。

我还以为自己用的是最新的呢,不久前才更新到 1.1.15 的

看来要赶着更新才行,呵呵
tmplinshi wrote:好吧,看来我以后回复还是得尽量啰嗦一点。。cancel[] := true 需要 AHK 版本 v1.1.17 以上。
话说,你们都不用最新版的啊。。我看到有新版,都会去看看更新了什么内容,并立即下载更新的。

Re: 【已解决】Gui加载IE,如何处理弹出式网页?

Posted: 06 Jun 2015, 04:12
by tmplinshi
才知道可以在事件函数中指定“对象”参数。这样就不需要写 global WB 了。

方法是在参数的最后一个参数指定“对象”参数:

Code: Select all

class WB_events
{
    NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl, WB) {
        cancel[] := true ; 取消弹出新窗口
        WB.Navigate(bstrUrl)
    }
}

Re: 【已解决】Gui加载IE,如何处理弹出式网页?

Posted: 09 Jun 2015, 21:19
by youwantme
好!又节省一行 :)
tmplinshi wrote:才知道可以在事件函数中指定“对象”参数。这样就不需要写 global WB 了。

方法是在参数的最后一个参数指定“对象”参数:

Code: Select all

class WB_events
{
    NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl, WB) {
        cancel[] := true ; 取消弹出新窗口
        WB.Navigate(bstrUrl)
    }
}