在弹出网页的同时,想跳转选项卡失败,求分析代码

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: arcticir, tmplinshi

youwantme
Posts: 47
Joined: 11 May 2015, 21:27

在弹出网页的同时,想跳转选项卡失败,求分析代码

09 Jun 2015, 21:59

在Gui中建立了两个选项卡Tab2,当点击选项卡一上面的链接时,会弹出窗口,让弹出窗口在选项卡二显示。在显示的同时,激活选项卡二。

代码如下,在选项卡显示弹出网页没问题,但是自动切换到选项卡二失败。请大神帮忙分析一下,谢谢!

Code: Select all

gui,new
global HTab ; <-- 全局变量,在函数中可访问
Global TabGroup
Gui, Add, Button, x1110 y5 w40 Default, 后退
Gui, Add, Button, x1160 y5 w40 Default, 前进
Gui, Add, Button, x1210 y80 w40 h30 Default, 下载
Gui ,+Resize
Gui, Add, Tab2,x00 y10 w1200 h690 vTabGroup  HwndHTab, General|New  ;添加组框架,包含两页
Gui,Tab,General ;对第一页进行设置
Gui, Add, ActiveX, w1180 h660 vWB, Shell.Explorer ;把浏览器添加到第一页
Gui,Tab,New
Gui, Add, ActiveX, w1180 h660 vWB2, Shell.Explorer
Gui, Tab  ; 随后的控件不属于任何选项卡控件的一部分.
Gui,Show,w1260 h700
ComObjConnect(WB, WB_events)  ; 连接WB事件到WB_events类对象
ComObjConnect(WB2, WB2_events)  ; 连接WB事件到WB_events类对象
WB.Silent := True ; 这一句可以避免一些网页弹出脚本错误
WB2.Silent := True ; 这一句可以避免一些网页弹出脚本错误
WB.Navigate("http://news.baidu.com") 
Return

class WB_events  ;链接到前面的Web事件
{
	TitleChange(title) 
	{
        TabSetText(HTab, 1, title)
	}

	NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl)  ;在第二页的浏览器打开弹出页面
	{
        global WB2
	Cancel[]:=true ; 取消弹出新窗口
        WB2.Navigate(bstrUrl)
	GuiControl, Choose, TabGroup,2
	}
}
Return

Class WB2_events  ;链接到前面的Web事件
{
	TitleChange(title) 
	{
        TabSetText(HTab, 2, title)
	}


	DocumentComplete(NewUrl)
	{
	}

	NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl)  ;在同一浏览器打开弹出页面
	{
        global WB2
	Cancel[]:=true ; 取消弹出新窗口
        WB2.Navigate(bstrUrl)
	}
}
Return

Button前进:
;wb.GoForward()
GuiControl, Choose, TabGroup,2
Return

Button后退:
GuiControl, Choose, TabGroup,1
;wb.Goback()
Return

Button下载:
GuiControl, Choose, TabGroup,2

Return


DisableSetRedraw() 
{
    static _ := OnMessage(0x0B, "DisableSetRedraw") ; WM_SETREDRAW = 0x0B
    return 0
}

TabSetText(HTAB, Item, ItemText) { ; Extracted from just me's Class_GuiTabEx.ahk
    Static TCIF_TEXT := 0x0001
    Static OffTxP := (3 * 4) + (A_PtrSize - 4)
    Static TCM_SETITEM := A_IsUnicode ? 0x133D : 0x1306   ; TCM_SETITEMW : TCM_SETITEMA
    Static Size := (5 * 4) + (2 * A_PtrSize) + (A_PtrSize - 4)
    VarSetCapacity(TCITEM, Size, 0)
    NumPut(TCIF_TEXT, TCITEM, 0, "UInt")
    NumPut(&ItemText, TCITEM, OffTxP, "Ptr")
    SendMessage, TCM_SETITEM, Item - 1, &TCITEM, , % "ahk_id " . HTAB
}


GuiClose:
ExitApp
tmplinshi
Posts: 1561
Joined: 01 Oct 2013, 14:57

Re: 在弹出网页的同时,想跳转选项卡失败,求分析代码

10 Jun 2015, 05:35

原因出在了 gui, new 这一句上。因为你创建了一个没有指定名称或句柄的的界面。

可以用以下两种方式:

Code: Select all

Gui, New, +HwndHGUI
GuiControl, %HGUI%:Choose, TabGroup, 2

Code: Select all

Gui, Main:New
GuiControl, Main:Choose, TabGroup, 2
或者干脆去掉 gui, new,就可以直接用 GuiControl, Choose, TabGroup, 2
garry
Posts: 2331
Joined: 22 Dec 2013, 12:50

Re: 在弹出网页的同时,想跳转选项卡失败,求分析代码

11 Jun 2015, 01:42

just a short idea, added gLabels to button Forward / Back and to Tab2 ( gTabchange )
if add > altsubmit to TAB2 , I get TabNumber (1,2..) instead of TabName

Code: Select all

f1:="http://ahkscript.org/boards/index.php"
f2:="http://www.timeanddate.com/"
xxa=Shell.Explorer
;xxa=Mozilla.Browser

Gui,2:default
Gui,2:Add, Button, x1200 y10 w40    gBackx    , <
Gui,2:Add, Button, x1260 y10 w40    gForwardx , >
Gui,2:Add, Tab2,x0 y20 h770 w1320 gTabchange vTabGroup HwndHTab altsubmit, General|New
Gui,2:Tab,General
Gui,2:Add, ActiveX, w1280 h700 vWB1, %xxa%
Gui,2:Tab,New
Gui,2:Add, ActiveX, w1280 h700 vWB2, %xxa%
Gui,2:Show , x10 y10 w1320 h770 ,Browser_Test

WB1.Silent := True
WB2.Silent := True
WB1.Navigate(f1)
WB2.Navigate(f2)
Return
;------------------

2Guiclose:
exitapp
;------------------

Backx:
if (TabGroup=1)
   wb1.GoBack()
if (TabGroup=2)
   wb2.GoBack()
Return

Forwardx:
if (TabGroup=1)
   wb1.GoForward()
if (TabGroup=2)
   wb2.GoForward()
Return
;-----------------

Tabchange:
GuiControlGet, TabGroup    ;<- if altsubmit = number (1,2 ..)  or otherwise TabName
Return
;-----------------------

DisableSetRedraw() {
    static _ := OnMessage(0x0B, "DisableSetRedraw") ; WM_SETREDRAW = 0x0B
    return 0
}

;...

;====================================================================

Return to “请求帮助”

Who is online

Users browsing this forum: No registered users and 3 guests