答案1
是的,您可以使用 AutoHotkey 来做到这一点...
实现此目的的最简单方法是,每当 Chrome 变为活动状态时监视活动窗口,然后一旦它不再处于活动状态,检查它是否已最小化。如果它已最小化,则可以最小化另一个窗口。
下面是一些基本的示例代码,您需要根据自己的目的进行调整——但有几点注意事项。
使用轮询例程可以轻松完成此操作,但轮询当然有延迟。另一种方法是挂接窗口事件,但在大多数情况下(为了简单起见),轮询几乎可以满足您的要求,即即使需要几百毫秒,它仍然可用。
这个基本示例的另一个注意事项是,您必须先实际使用 Chrome,它才能检测到最小化事件。在实际使用中,有时您不会激活 Chrome,但会想直接将其最小化,在这种情况下,它会在未先激活的情况下被最小化。即使在窗口不活动后,也可以通过轮询窗口来检测和处理这种情况,但您需要修改基本示例代码才能做到这一点,而该代码本来就不是为处理这种情况而编写的。
最后需要注意的是,如果您打开了多个 Chrome 窗口,则需要以稍微不同的方式处理它们。例如,您不会因为第一个 Chrome 窗口被最小化而最小化 Tabs Outliner,但如果所有 Chrome 窗口都最小化,您可能希望将其最小化。这需要进行修改以检查打开了多少个窗口、它们是否都最小化了等等。
还可以实现全面的“对接”功能作为此概念的扩展(如果正确实现,效果会很好),在这种情况下,根据您想要编写的编码量,您可能会:
- 让 Tabs Outliner 窗口“停靠”到 Chrome 窗口(即,强制左侧或右侧窗口边缘之间的水平间距为 0)
- 如果调整了一个窗口,则保持两个窗口的垂直高度相同
- 当 Tabs Outliner 最小化时最小化 Chrome
- 每当 Tabs Outliner 恢复时恢复 Chrome(参见注释掉的代码)
- 如果 Chrome 已最大化,则取消恢复并为 Tabs Outliner 腾出空间
- 等等——取决于你想让它变得多么花哨
不过关键的一点是,使用 AutoHotkey 中的轮询循环以及使用可以检查大小、状态、修改所涉及的各种窗口等的基本窗口函数可以很容易地完成。
示例代码
SetTitleMatchMode, 2
tooltipsOn:=True ; set false once finished debugging
Loop {
If (ActiveID:=WinActive("Chrome ahk_exe chrome.exe")) {
If tooltipsOn
Tooltip, Chrome detected active...
WinWaitNotActive, ahk_id %ActiveID%
If tooltipsOn
Tooltip, Chrome detected no longer active...
WinGet, MinMaxState, MinMax, % "ahk_id" ActiveID
If (MinMaxState=-1) {
WinMinimize("Tabs Outliner")
If tooltipsOn
Tooltip, Chrome detected no longer active... Minimizing Tabs Outliner...
} Else If tooltipsOn
Tooltip, Chrome detected no longer active... MinMaxSate=%MinMaxState%
}
;Else If WinActive("Tabs Outliner") { ; restore chrome if Tabs Outliner is activated
; If tooltipsOn
; Tooltip, Found Tabs Outliner...
; WinGet, MinMaxState, MinMax, % "ahk_id" WinExist("Chrome ahk_exe chrome.exe")
; If (MinMaxState=-1)
; WinRestore("Chrome ahk_exe chrome.exe")
;
; If tooltipsOn
; Tooltip MinMaxState=%MinMaxState%
;
;}
If tooltipsOn {
Sleep 1500
Tooltip
}
Sleep 10
}