使用 AHK 检查浏览器中的所有选项卡
Check all Tabs in browser with AHK
我已经准备好了这个代码
!^j::
If WinExist("The Title")
WinActivate
else
Run, https://webpage/index.php
Return
每当我按下热键时,如果打开了想要的网页,浏览器就会最大化。但是如果网页没有打开,我必须打开浏览器(如果浏览器已经打开,则打开一个新选项卡)并转到该页面。到目前为止一切似乎都很好,但有一个问题...
如果浏览器打开了,那个页面也打开了但是浏览器没有坐在那个标签页程序打开一个新的标签页,这意味着每次浏览器与包含所查找页面的标签位于另一个标签中,将打开一个新标签,如何防止这种情况?
有办法解决吗?喜欢获取所有浏览器选项卡并进行循环的功能吗?
编辑: 感谢@Jsmith2800,现在我有了这段代码:
!^j::
SetTitleMatchMode, 2
WinActivate, - Mozilla Firefox
SetTitleMatchMode, 1
If WinExist("The Title")
WinActivate
else {
winGetActiveTitle, Title
loop{
send ^{TAB}
If WinExist("The Title")
break
If WinExist(Title)
break
}
If WinExist(Title)
Run, https://webpage/index.php
}
Return
首先,我必须打开浏览器window,所以Ctrl+Tab实际上是切换标签。所以前 3 行用于打开 Mozilla Firefox。
然后我询问我要查找的页面是否在当前选项卡中,如果是,则只激活该选项卡。但如果不是,则获取当前Title并开始循环。
在该循环中,首先更改选项卡,然后再次询问该新选项卡是否是我要查找的选项卡。如果新选项卡是那个,则打破循环并 return。如果不是,请在开始循环之前询问新标签页是否是同一个标签页,如果是,则没有打开想要的页面,因此打开它并打破循环。
这一切正常,除了一件小事:标签是随机加入的,所以有时它会在到达想要的页面之前返回到 Title
页面 我怎样才能让它不随机。已经尝试过 SetWinDelay, 250
但没有成功。
我没有太多使用 Autohotkey 的经验,但我发现 this 它似乎可以满足您的需求,您需要将它与您拥有的一些位结合起来已经有了,但如果我的理解是正确的,它应该看起来像这样。
If WinExist("The Title")
WinActivate
else {
winGetActiveTitle, Title
loop{
send ^{TAB}
if WinActive ("The Title")
break
if WinActive ("Title")
break
Run, https://webpage/index.php
else
continue
}
}
我对此不是 100% 满意,因为它对我来说看起来有点乱(嵌套在 else 语句中的 if else 语句),但根据我的理解,这应该首先查看您正在寻找的标题存在,如果效果很好,它将激活该页面。如果没有,它将进入下一个语句,它将您当前选择的页面的标题记录为变量 'Title' 然后开始循环,它将发送键 ctrl +tab 移动到下一个选项卡,如果 window 标题现在等于您要查找的内容(在本例中,显示为 'The Title'), 它将停止循环。如果标题等于您在开始时记录的标题(即您已经循环了所有打开的选项卡),它将打破循环,并打开您需要的页面。如果它不等于其中任何一个,它将重新启动循环并再次点击 Ctrl+tab,再次检查标题等直到它满足以上 2 个条件之一。
希望这会对您有所帮助,即使它只是 link 到网站的信息可以帮助您,因为我说我不是最有经验的 AHK 用户所以不能保证我的建议会成功的,还是祝你好运。
好的,我解决了这个问题,感谢 @Jsmith2800 提醒了我。
这是新代码
!^j::
SetTitleMatchMode, 2
WinActivate, - Mozilla Firefox
SetTitleMatchMode, 1
If WinExist("The Title")
WinActivate
else {
searchedTab := "The Title"
WinGetActiveTitle, StartingTitle
loop{
send {Control down}{Tab}{Control Up}
Sleep 400
IfWinActive, %SearchedTab%
Return
WinGetActiveTitle, CurrentTabTitle
If (CurrentTabTitle == StartingTitle)
break
}
Run, https://webpage/index.php
}
Return
所以,快速解释解决方案。打开浏览器选项卡并检查查找的页面是否处于活动状态后...进入循环时,我得到当前页面的标题。在循环内,首先更改选项卡,然后休眠 0.4 秒,因此活动选项卡更改然后询问相同的页面(如果需要页面,完成。如果没有,如果搜索到第一页,则退出循环并 运行 想要页面(如果没有打开浏览器也可以工作))。
基本上,问题是 SetWinDelay 没有按预期工作,将其替换为 Sleep 并完成。另外,如果浏览器没有打开,旧的脚本就没用了。
我希望能说清楚,并以此帮助任何需要它的人。
我已经准备好了这个代码
!^j::
If WinExist("The Title")
WinActivate
else
Run, https://webpage/index.php
Return
每当我按下热键时,如果打开了想要的网页,浏览器就会最大化。但是如果网页没有打开,我必须打开浏览器(如果浏览器已经打开,则打开一个新选项卡)并转到该页面。到目前为止一切似乎都很好,但有一个问题...
如果浏览器打开了,那个页面也打开了但是浏览器没有坐在那个标签页程序打开一个新的标签页,这意味着每次浏览器与包含所查找页面的标签位于另一个标签中,将打开一个新标签,如何防止这种情况?
有办法解决吗?喜欢获取所有浏览器选项卡并进行循环的功能吗?
编辑: 感谢@Jsmith2800,现在我有了这段代码:
!^j::
SetTitleMatchMode, 2
WinActivate, - Mozilla Firefox
SetTitleMatchMode, 1
If WinExist("The Title")
WinActivate
else {
winGetActiveTitle, Title
loop{
send ^{TAB}
If WinExist("The Title")
break
If WinExist(Title)
break
}
If WinExist(Title)
Run, https://webpage/index.php
}
Return
首先,我必须打开浏览器window,所以Ctrl+Tab实际上是切换标签。所以前 3 行用于打开 Mozilla Firefox。
然后我询问我要查找的页面是否在当前选项卡中,如果是,则只激活该选项卡。但如果不是,则获取当前Title并开始循环。
在该循环中,首先更改选项卡,然后再次询问该新选项卡是否是我要查找的选项卡。如果新选项卡是那个,则打破循环并 return。如果不是,请在开始循环之前询问新标签页是否是同一个标签页,如果是,则没有打开想要的页面,因此打开它并打破循环。
这一切正常,除了一件小事:标签是随机加入的,所以有时它会在到达想要的页面之前返回到 Title
页面 我怎样才能让它不随机。已经尝试过 SetWinDelay, 250
但没有成功。
我没有太多使用 Autohotkey 的经验,但我发现 this 它似乎可以满足您的需求,您需要将它与您拥有的一些位结合起来已经有了,但如果我的理解是正确的,它应该看起来像这样。
If WinExist("The Title")
WinActivate
else {
winGetActiveTitle, Title
loop{
send ^{TAB}
if WinActive ("The Title")
break
if WinActive ("Title")
break
Run, https://webpage/index.php
else
continue
}
}
我对此不是 100% 满意,因为它对我来说看起来有点乱(嵌套在 else 语句中的 if else 语句),但根据我的理解,这应该首先查看您正在寻找的标题存在,如果效果很好,它将激活该页面。如果没有,它将进入下一个语句,它将您当前选择的页面的标题记录为变量 'Title' 然后开始循环,它将发送键 ctrl +tab 移动到下一个选项卡,如果 window 标题现在等于您要查找的内容(在本例中,显示为 'The Title'), 它将停止循环。如果标题等于您在开始时记录的标题(即您已经循环了所有打开的选项卡),它将打破循环,并打开您需要的页面。如果它不等于其中任何一个,它将重新启动循环并再次点击 Ctrl+tab,再次检查标题等直到它满足以上 2 个条件之一。
希望这会对您有所帮助,即使它只是 link 到网站的信息可以帮助您,因为我说我不是最有经验的 AHK 用户所以不能保证我的建议会成功的,还是祝你好运。
好的,我解决了这个问题,感谢 @Jsmith2800 提醒了我。 这是新代码
!^j::
SetTitleMatchMode, 2
WinActivate, - Mozilla Firefox
SetTitleMatchMode, 1
If WinExist("The Title")
WinActivate
else {
searchedTab := "The Title"
WinGetActiveTitle, StartingTitle
loop{
send {Control down}{Tab}{Control Up}
Sleep 400
IfWinActive, %SearchedTab%
Return
WinGetActiveTitle, CurrentTabTitle
If (CurrentTabTitle == StartingTitle)
break
}
Run, https://webpage/index.php
}
Return
所以,快速解释解决方案。打开浏览器选项卡并检查查找的页面是否处于活动状态后...进入循环时,我得到当前页面的标题。在循环内,首先更改选项卡,然后休眠 0.4 秒,因此活动选项卡更改然后询问相同的页面(如果需要页面,完成。如果没有,如果搜索到第一页,则退出循环并 运行 想要页面(如果没有打开浏览器也可以工作))。
基本上,问题是 SetWinDelay 没有按预期工作,将其替换为 Sleep 并完成。另外,如果浏览器没有打开,旧的脚本就没用了。
我希望能说清楚,并以此帮助任何需要它的人。