如何使用 Autohotkey 聚焦现有的 Google Chrome 标签,而不是“容器”窗口?
细节
Google Chrome 似乎用一个容器窗口句柄来表示每个窗口,该句柄包含一个或多个选项卡。选项卡(至少是当前选项卡)有自己的窗口句柄。选项卡窗口句柄有窗口标题(目前都以“-Google Chrome”结尾),而容器窗口句柄本身没有。以下自动热键代码无法按预期在 Google Chrome 中工作:
^+i::
if WinExist("ahk_class Chrome_WidgetWin_0")
WinActivate
else
Run "C:\Users\vleeshue\AppData\Local\Google\Chrome\Application\chrome.exe"
return
如果存在 Google Chrome 窗口,则此绑定将聚焦于该窗口,否则将运行 Google Chrome。但是,它通常会以容器窗口为目标(在 Window Spy 中,窗口标题为空白)。激活容器窗口将禁止使用 Google Chrome 键盘快捷键。无法访问的键盘快捷键包括用于访问多功能栏的所有重要 ctrl+l。由于我尚未找到始终激活选项卡窗口而不是容器窗口的方法,因此我的解决方法是使用鼠标,但如果可能的话,我更愿意避免这样做。
Window Spy 截图
背景
当前 Google Chrome 版本:5.0.317.2 dev
我使用的常见自动热键绑定是键盘快捷键,如果特定应用程序已在运行,则聚焦该应用程序;如果特定应用程序未运行,则运行该应用程序。
例如,我将其用于 foobar2000
^+m::
If WinExist("foobar2000")
WinActivate
else
Run "C:\Program Files (x86)\foobar2000\foobar2000.exe"
return
答案1
^+i::
if WinExist("ahk_class Chrome_WindowImpl_0")
{
WinActivate
ControlFocus, Chrome_AutocompleteEditView1
}
else
Run "C:\Users\vleeshue\AppData\Local\Google\Chrome\Application\chrome.exe"
return
应该可以
(“Chrome_AutocompleteEditView1”是多功能栏控件的名称,因此您可以添加Send ^a
以全选)
笔记:要获取ahk_class
适用于您的 Chrome 版本的 ,例如 ,ahk_class Chrome_WindowImp1-0
请使用AU3_Spy.exe
autohotkey 目录中的 。如果示例不起作用,这将允许您找到适合您的 Chrome 浏览器的正确 ahk 类。
更新:我无法重现,也许使用另一个控件会更好...要获得窗口控件列表,我使用以下代码:
#Persistent
SetTimer, WatchCursor, 100
return
WatchCursor:
MouseGetPos, , , id, control
WinGetTitle, title, ahk_id %id%
WinGetClass, class, ahk_id %id%
WinGet, ControlList, ControlList, A
ToolTip, Under Cursor:`nahk_id: %id%`nahk_class: %class%`nTitle:%title%`nControl: %control%`n`nWindow Control List:`n%ControlList%
return
所以我的 google chrome 4.0.249.78 beta (36714) 的控件是:
- 视图文本字段编辑1
- Chrome_RenderWidgetHostWND1
- Chrome_AutocompleteEditView1
- Chrome_WindowImpl_01
- Chrome_WindowImpl_02
答案2
答案3
使用 Alt+Tab 的解决方法:
; Activates the window identified with wintitle if it's active,
; else opens a new one
OpenWindow(wintitle, runCommand)
{
if WinExist(wintitle)
WinActivate ; activates the window found above. Sweet.
else
Run %runCommand%
}
#g::
AppsKey & g::
prevKeyDelay := A_KeyDelay
SetKeyDelay, 100
OpenWindow("ahk_class Chrome_WidgetWin_0", A_AppData
. "\Local\Google\Chrome\Application\chrome.exe")
SendEvent {Alt down}{Tab}
SendEvent +{Tab}
SendEvent {Alt up}
SetKeyDelay, prevKeyDelay
return
根据需要调整参数。使用 SetKeyDelay 是因为发送速度太快不起作用。
答案4
Window Spy 在“可见窗口文本”字段中返回选项卡标题。
您可以循环浏览标签,直到找到所需的文本。要从一个标签切换到另一个标签,请发送CTRL+TAB键。问题在于在某个时刻停止,但如果你知道最多使用不超过 X 个标签,则可以在循环中包含一个计数器,以便在未找到所需标签时在某个时刻中断。