google-chrome - 如何使用 AutoHotkey 在 Chrome 或 Firefox 中激活特定选项卡?

标签 google-chrome autohotkey

我有 20 个不同的标签,我希望只需按 Ctrl+A 即可打开

以下适用于前 9 个选项卡,但不能超出此范围

#SingleInstance, Force
#IfWinActive, ahk_exe chrome.exe
^a::Send, ^2

所以我读到我应该使用 WinActivate

我可以让 WinActivate 与记事本等程序一起使用,但不能与 Chrome 标签一起使用。有任何想法吗?
^a::
SetTitleMatchMode, 2
IfWinExist, Twitter ahk_class Chrome_WidgetWin_1
  WinActivate

最佳答案

一段时间以来,我一直在研究实现此功能的函数。我刚刚完成了这个项目,
并有一个脚本来实现您需要的功能。

注意:根据 Firefox 和 Chrome 的变化,这些脚本可能会中断
在任何时候,就像以前试图操纵 Firefox 选项卡一样,
但是请检查 AutoHotkey 论坛以获取更新和/或以下链接:

Firefox/Chrome,获取标签名称/焦点标签 - AutoHotkey 社区
https://autohotkey.com/boards/viewtopic.php?f=6&t=26947&p=126248#p126248

注意:此脚本需要运行 Acc 库,请参阅链接:

Acc 库 (MSAA) 和 AccViewer 下载链接 - AutoHotkey 社区
https://autohotkey.com/boards/viewtopic.php?f=6&t=26201

GroupAdd, vGroupFirefoxAndChrome, ahk_class MozillaWindowClass
GroupAdd, vGroupFirefoxAndChrome, ahk_class Chrome_WidgetWin_1

#IfWinActive, ahk_group vGroupFirefoxAndChrome
^a::
^b::
^c::
^d::
^e::
^f::
^g::
^h::
^i::
^j::
^k::
^l::
^m::
^n::
^o::
^p::
^q::
^r::
^s::
^t::
^u::
^v::
^w::
^x::
^y::
^z::
WinGet, hWnd, ID, A
WinGetClass, vWinClass, ahk_id %hWnd%
vLetter := SubStr(A_ThisHotkey, 1-1)
vNum := Asc(vLetter)-96

if (vWinClass = "MozillaWindowClass")
JEE_FirefoxFocusTabByNum(hWnd, vNum)
if (vWinClass = "Chrome_WidgetWin_1")
JEE_ChromeFocusTabByNum(hWnd, vNum)
Return
#IfWinActive

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

JEE_FirefoxGetTabNames(hWnd, vSep="`n")
{
oAcc := Acc_Get("Object", "4", 0, "ahk_id " hWnd)
Loop, % oAcc.accChildCount
if (oAcc.accName(A_Index) = "Browser tabs")
if (1, oAcc := Acc_Child(oAcc, A_Index))
break
oAcc := Acc_Child(oAcc, 1)

vOutput := ""
Loop, % oAcc.accChildCount
{
vTabText := oAcc.accName(A_Index)
if !(vTabText == "")
;if !(vTabText == "New Tab")
;if !(vTabText == "Open a new tab")
vOutput .= vTabText vSep
}
vOutput := SubStr(vOutput, 1, -StrLen(vSep)) ;trim right

oAcc := ""
Return vOutput
}

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

JEE_FirefoxFocusTabByNum(hWnd, vNum)
{
oAcc := Acc_Get("Object", "4", 0, "ahk_id " hWnd)
Loop, % oAcc.accChildCount
if (oAcc.accName(A_Index) = "Browser tabs")
if (1, oAcc := Acc_Child(oAcc, A_Index))
break
oAcc := Acc_Child(oAcc, 1)

vRet := 0
For each, oChild in Acc_Children(oAcc)
{
if (A_Index = vNum)
if (1, oChild.accDoDefaultAction(0), vRet := A_Index)
break
}

Return vRet
}

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

JEE_FirefoxFocusTabByName(hWnd, vTitle, vNum=1)
{
oAcc := Acc_Get("Object", "4", 0, "ahk_id " hWnd)
Loop, % oAcc.accChildCount
if (oAcc.accName(A_Index) = "Browser tabs")
if (1, oAcc := Acc_Child(oAcc, A_Index))
break
oAcc := Acc_Child(oAcc, 1)

vCount := 0
vRet := 0
For each, oChild in Acc_Children(oAcc)
{
vTabText := oChild.accName(0)
if (vTabText = vTitle)
vCount ++
if (vCount = vNum)
if (1, oChild.accDoDefaultAction(0), vRet := A_Index)
break
}

oAcc := ""
Return vRet
}

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

JEE_ChromeGetTabNames(hWnd, vSep="`n")
{
oAcc := Acc_ObjectFromWindow(hWnd)
oAcc := Acc_Child(oAcc, 1), oAcc := Acc_Child(oAcc, 2)
oAcc := Acc_Child(oAcc, 2), oAcc := Acc_Child(oAcc, 2)

vOutput := ""
For each, oChild in Acc_Children(oAcc)
{
vTabText := Acc_Child(oChild, 1).accName(0)
if !(vTabText == "")
vOutput .= vTabText vSep
}
vOutput := SubStr(vOutput, 1, -StrLen(vSep)) ;trim right

oAcc := ""
Return vOutput
}

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

JEE_ChromeFocusTabByNum(hWnd, vNum)
{
oAcc := Acc_ObjectFromWindow(hWnd)
oAcc := Acc_Child(oAcc, 1), oAcc := Acc_Child(oAcc, 2)
oAcc := Acc_Child(oAcc, 2), oAcc := Acc_Child(oAcc, 2)

vRet := 0
For each, oChild in Acc_Children(oAcc)
{
if (A_Index = vNum+1)
if (1, oChild.accDoDefaultAction(0), vRet := A_Index)
break
}

Return vRet
}

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

JEE_ChromeFocusTabByName(hWnd, vTitle, vNum=1)
{
oAcc := Acc_ObjectFromWindow(hWnd)
oAcc := Acc_Child(oAcc, 1), oAcc := Acc_Child(oAcc, 2)
oAcc := Acc_Child(oAcc, 2), oAcc := Acc_Child(oAcc, 2)

vCount := 0
vRet := 0
For each, oChild in Acc_Children(oAcc)
{
vTabText := oChild.accName(0)
if (vTabText = vTitle)
vCount ++
if (vCount = vNum)
if (1, oChild.accDoDefaultAction(0), vRet := A_Index)
break
}

oAcc := ""
Return vRet
}

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

关于google-chrome - 如何使用 AutoHotkey 在 Chrome 或 Firefox 中激活特定选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41478085/

相关文章:

autohotkey - 如果键来自脚本,如何忽略它,但如果它来自 AHK 键盘,如何触发它?

debugging - 关于调试chrome扩展

javascript - Chrome 扩展 onCreatedNavigationTarget Listener 停止工作

default-value - 为什么 AutoHotkey 不支持参数列表中间的默认参数?

RegEx:将所有内容匹配到最后一个空格而不包括它

Autohotkey::= 和 = 赋值运算符有什么区别

html - SVG 未在最新版本的 Chrome 中显示

javascript - 关闭当前选项卡并打开一个新选项卡 - 仅适用于 Chrome

html - 为什么 srcset 下载两个图像?

autohotkey - 如何将 AutoHotKey 代码设置为仅在 chrome 中运行?