【发布时间】:2012-04-07 09:35:29
【问题描述】:
使用 AutoHotkey,我如何绑定热键以在多个显示器上拉伸/最大化/跨越窗口,使其覆盖两个显示器?
现在,我必须通过用鼠标手动拉伸窗口来做到这一点。我知道有专门的工具可以做到这一点,但我已经在运行 AutoHotkey 脚本,我宁愿限制我继续运行的工具数量。
【问题讨论】:
标签: autohotkey multiple-monitors
使用 AutoHotkey,我如何绑定热键以在多个显示器上拉伸/最大化/跨越窗口,使其覆盖两个显示器?
现在,我必须通过用鼠标手动拉伸窗口来做到这一点。我知道有专门的工具可以做到这一点,但我已经在运行 AutoHotkey 脚本,我宁愿限制我继续运行的工具数量。
【问题讨论】:
标签: autohotkey multiple-monitors
我是这样做的,映射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
+#Up::
{
Title := WinGetTitle("A")
WinRestore(Title)
X1 := SysGet(76)
Y1 := SysGet(77)
Width := SysGet(78)
Height := SysGet(79)
WinMove(X1, Y1, Width, Height, Title)
}
【讨论】:
SysGet 上的文档。 76 = SM_XVIRTUALSCREEN, 77 = SM_YVIRTUALSCREEN, 78 = SM_CXVIRTUALSCREEN, & 79 = SM_CYVIRTUALSCREEN,但是文档中有更多关于这些值代表什么的信息
WinMove, %Title%,, X1, Y1, <width>, <height>。查看this gist 了解更多信息。
我知道这个帖子有点老了,但这是迄今为止我能找到的跨多个显示器最大化的最佳“免费”方式。我现在在 Windows 8 和 7 64 位系统上都使用了它,这个宏可能会成为我默认工具包的一部分 :) 谢谢大家。
我发帖的原因是我稍微修改了它以将窗口恢复到单个监视器大小,因为一旦 UP 宏运行,您将不得不手动将窗口拖回单个子-如果需要,监视器大小。我已经添加了 shift+windows+down 组合来执行此操作。记住 Windows 的旧位置可能会做得更好,但我不是自动热键专家,这适用于我的目的......(您也可以将“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 以反映本机最大化窗口的行为。
我在工作和家里有两台显示器,我的任务栏在左边,所以我需要调整这个脚本以确保它正确移动窗口。
+#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
【讨论】: