使用AutoHotkey,我如何将热键绑定到窗口跨越多个监视器并覆盖两个显示器时进行拉伸/最大化/屏幕自适应?
目前,我必须通过鼠标手动拉伸窗口来完成此操作。我知道有专门的工具可以实现这一点,但我已经在运行AutoHotkey脚本,而且更倾向于减少正在运行的工具数量。
使用AutoHotkey,我如何将热键绑定到窗口跨越多个监视器并覆盖两个显示器时进行拉伸/最大化/屏幕自适应?
目前,我必须通过鼠标手动拉伸窗口来完成此操作。我知道有专门的工具可以实现这一点,但我已经在运行AutoHotkey脚本,而且更倾向于减少正在运行的工具数量。
以下是我如何做到的,将 Shift + Windows + Up
组合键映射为最大化窗口跨越所有显示器。这与Windows 7的Windows + Up
热键相呼应,后者可以最大化所选窗口。
+#Up::
WinGetActiveTitle, Title
WinRestore, %Title%
SysGet, X1, 76
SysGet, Y1, 77
SysGet, Width, 78
SysGet, Height, 79
WinMove, %Title%,, X1, Y1, Width, Height
return
AHK v2+#Up::
{
Title := WinGetTitle("A")
WinRestore(Title)
X1 := SysGet(76)
Y1 := SysGet(77)
Width := SysGet(78)
Height := SysGet(79)
WinMove(X1, Y1, Width, Height, Title)
}
我在工作和家里都使用双显示器,任务栏在左侧,因此我需要调整此脚本以确保窗口正确移动。
+#Up::
WinGetActiveTitle, Title
WinRestore, %Title%
SysGet, Mon1, MonitorWorkArea, 1
SysGet, Mon2, MonitorWorkArea, 2
Monitor1Width := Mon1Right - Mon1Left
Monitor2Width := Mon2Right - Mon2Left
MonitorsWidth := Monitor1Width + Monitor2Width
SysGet, Height, 79
WinMove, %Title%,, %Mon1Left%, %Mon1Top%, %MonitorsWidth%, %Mon2Bottom%
return
+#Down::
WinGetActiveTitle, Title
WinRestore, %Title%
SysGet, Mon2, MonitorWorkArea, 1
Monitor1Width := Mon2Right - Mon2Left
WinMove, %Title%,, %Mon2Left%, %Mon2Top%, %Monitor1Width%, %Mon2Bottom%
return
+#Up::
WinGetActiveTitle, Title
WinRestore, %Title%
SysGet, X1, 76
SysGet, Y1, 77
SysGet, Width, 78
SysGet, Height, 79
WinMove, %Title%,, X1, Y1, Width, Height
return
+#Down::
WinGetActiveTitle, Title
WinRestore, %Title%
WinMove, %Title%,, 0, 0, A_ScreenWidth, A_ScreenHeight
return
+#Down
时保存和恢复原始窗口尺寸,而不是在多个监视器之间切换最大化和在一个监视器上最大化,那么这将显着改善。或者更好的方法是,在聚合最大化窗口上聚焦时覆盖win+down以模拟本机最大化窗口的行为。 - Jeff Axelrod
SysGet
的文档。76
=SM_XVIRTUALSCREEN
,77
=SM_YVIRTUALSCREEN
,78
=SM_CXVIRTUALSCREEN
和79
=SM_CYVIRTUALSCREEN
,但是文档中还有更多关于这些值代表的信息。 - KyleMitWinMove, %Title%,, X1, Y1, <width>, <height>
。查看这个gist获取更多信息。 - ZebianoWinMove, %Title%,, X1, Y1, Width, Height-60
,这样我的任务栏就不会被窗口遮挡住了。 - Michael