如何在多个显示器上最大化窗口?

22

使用AutoHotkey,我如何将热键绑定到窗口跨越多个监视器并覆盖两个显示器时进行拉伸/最大化/屏幕自适应?

目前,我必须通过鼠标手动拉伸窗口来完成此操作。我知道有专门的工具可以实现这一点,但我已经在运行AutoHotkey脚本,而且更倾向于减少正在运行的工具数量。

3个回答

35

以下是我如何做到的,将 Shift + Windows + Up 组合键映射为最大化窗口跨越所有显示器。这与Windows 7的Windows + Up热键相呼应,后者可以最大化所选窗口。

AHK v1
+#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)
}

为了让Windows VNC客户端正常工作,请在“设置”中选择“输入”,然后取消勾选“直接将特殊键传递给VNC服务器”。 - stevesliva
1
@kevinf,请查看SysGet的文档。76=SM_XVIRTUALSCREEN77=SM_YVIRTUALSCREEN78=SM_CXVIRTUALSCREEN79=SM_CYVIRTUALSCREEN,但是文档中还有更多关于这些值代表的信息。 - KyleMit
这个在Netflix、Youtube等全屏模式下工作得很好,除了它只占用一个屏幕。 - ndthl
3
我有3个显示器,有没有办法只最大化其中的两个? - BBK
2
@BBK 你可以使用自定义输入 WinMove, %Title%,, X1, Y1, <width>, <height>。查看这个gist获取更多信息。 - Zebiano
1
太棒了!我做了一个小调整WinMove, %Title%,, X1, Y1, Width, Height-60,这样我的任务栏就不会被窗口遮挡住了。 - Michael

8

我在工作和家里都使用双显示器,任务栏在左侧,因此我需要调整此脚本以确保窗口正确移动。

+#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

7
我知道这个帖子有点旧了,但这绝对是我能找到的最好的“免费”跨多个显示器最大化的方法。我在Windows 8和7 64位系统上都使用过它,这个宏可能会成为我的默认工具包的一部分:)非常感谢。
我发帖的原因是,我稍微修改了一下,使窗口恢复到单个监视器大小,因为一旦运行UP宏,如果需要,您将不得不手动将窗口拖回单个子监视器大小。我添加了shift+windows+down组合键来完成此操作。可能可以更好地记住窗口的旧位置,但我不是autohotkey专家,这对于我的目的有效...(您还可以将“A_ScreenWidth,A_ScreenHeight”更改为800,600之类的较小值进行处理,并调整0,0以使屏幕中心化,例如300,200)
使用autohotkey exe编译器,您可以获得可移植exe,在另一台计算机上使用它。(即:我的办公电脑将完美运行该exe,但我需要管理员帐户安装完整程序:D)
+#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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接