这些年来,「大屏就是生产力」的观念深入人心,越来越多的用户开始使用大尺寸屏幕以及多显示器,但有效利用屏幕面积、快捷操作应用窗口还需要软件辅助。
Windows 平台下,作为 PowerToys 组件之一的 FancyZones 就有不少拥趸。它的功能非常简单:划出一块区域,将窗口移至此区域后便会被调整到指定大小与位置:
图片来自 PowerToys 官网
功能基础的同时相对臃肿成为了我拒绝它的理由。我希望有一个应用能做到像 FancyZones 般可靠的同时,更加快捷灵活,于是我发现并改进了一个分屏工具:GridMove。
如果你频繁地使用 Windows 自带的窗口贴靠功能,或者已经是 FancyZones 的用户,那么免费、开箱即用并且功能更加强大的 GridMove 或许能赢得你的芳心。
JGPaiva 2013 年发布 GridMove 后一直没有再更新,检查代码后不难发现有一些功能原作者并没有写完。下面的版本是以此为基础改善而来,下载 exe 文件双击安装即可体验:
启动后,GridMove 会在后台静默运行。如果想要控制某些以提升权限运行的应用,例如任务管理器,需要同样以管理员权限运行 GridMove。右键位于系统托盘的绿色方格图标即可调整软件功能。
方便的 WinDrag
软件的第一个功能是 WinDrag。默认情况下,当我们需要调整窗口的位置时,必须将鼠标移动到窗口的标题栏,而有了此软件后,仅需按住 Windows 徽标键,鼠标左键应用窗口的任意位置便能拖动窗口,窗口开始移动后可以松开 Windows 键:
鼠标在黄色圆点处
Linux、macOS 系统也有类似的实现,但一般以 Alt
为修饰键。而在 Windows 上,使用 Alt
键会和文件资源管理、Office 插件等诸多应用功能冲突,因而我选择使用极少被用到的 Windows 键。
同样在按住 Windows 键的情况下,鼠标悬停在窗口的任意位置,按下中键会关闭此应用,这样能省下不少找右上角小小的叉号的功夫。
窗口调整更快一步
鼠标右键自然也不会闲着,这便引出了 GridMove 的第二个功能:以多种方式快捷调整窗口的大小和位置。
像其他的分屏工具一样,GridMove 在显示器上划出许多固定位置、固定大小的区域,我们称之为 Grid,将应用窗口拖到 Grid 上后,该应用就会被缩放、移动到这块区域上。
然而相较于 Windows 自身的窗口贴靠和 FancyZones,软件针对不同的交互方式,提供了更加全面快捷的切换手段:
- 键盘 + 鼠标:按住 Windows 键,鼠标右键窗口的任意位置放置应用:
不需要聚焦到标题栏,也不需要激活窗口,直接拖动即可
- 键盘 + 触摸板:按住 Windows 和 Shift 键,鼠标左键放置应用;许多 Windows 触摸板不支持模拟鼠标右键拖动,因而设计此按键组合;
- 仅鼠标:按住鼠标中键放置窗口;
- 仅触摸板:拖放到屏幕边缘。请关闭 Windows 自带的贴靠窗口使用;以及
- 仅键盘:勾选「快捷键」> 「快捷模式」,使用
Alt
+ 数字键放置激活的应用,Alt
键可替换为其他按键。
这些触发方式覆盖了多种使用场景,提供了开关选项,并且以简洁易操作为前提,不会出现诸如 Windows
+ PageUp
难以单手操作的交互设计。此外,GridMove 可以直接覆盖系统默认的各类快捷键,例如,如果你很少用 Windows
+ 数字键切换任务栏应用,那么将其分配给 GridMove 也能生效。
日常使用中,我会把以上所有功能全部开启,以备不时之需。由于 GridMove 本身占用资源极少,并不需要担心性能和功耗问题,仅需留意不和其他应用的快捷功能冲突。
而当操作少数窗口——例如 VirualBox 虚拟机、全屏游戏——出现问题时,可以按 Esc
键退出窗口调整模式,然后利用「过滤窗口」功能按屏幕提示将该应用添加到不生效的名单中。
切换布局
GridMove 预置了一些 Grid 布局,这些布局可以满足绝大多数需求。你可以从「模板」选项栏中应用不同的布局。如果要直观地看到模板效果,可以勾选「选项」>「显示网格」,再以任意方式触发窗口调整模式,模板设置的 Grid 便能一览无余:
网格上的数字是该区域的编号,在快捷模式开启的情况下,我们能按下修饰键 + 区域编号快速移动窗口。
软件还支持在不同布局间快速切换。首先选择「模板」>「模板切换顺序」,以英文逗号分隔填写不同模板的名称。接着,在激活 GridMove 的情况下,单击鼠标右键便能按顺序切换布局模板。
自定义布局
尽管不像 FancyZones 那样直观,在 GridMove 中设计自己的布局并不难。
定位到软件安装目录,或者选择「模板」>「打开模板文件夹」,你可以看到Grids
目录。其中所有以 .gird
结尾的文件本质上是文本文件,它们会在软件启动时被读取加载为模板;修改、添加模板只要编辑或新建 gird 文件。
建议直接从既有的 gird 文件上修改布局,其语法非常简单,只涉及到了一些四则运算和一些变量,如下所示:
# 井号及之后的内容仅做说明,使用时需删除
[Groups]
NumberOfGroups = 12 # 这里写总共有多少区域
[1] # 这是 grid 的编号
# Trigger 部分
TriggerTop = [Monitor1Top]
TriggerRight = [Monitor1Left] + [Monitor1Width] / 9 * 1
TriggerBottom = [Monitor1Bottom]
TriggerLeft = [Monitor1Left]
# Grid 部分;如果不写这一部分,则取 Trigger 的值
GridTop = [Monitor1Top]
GridRight = [Monitor1Right] - [Monitor1Width] / 3 * 2
GridBottom = [Monitor1Bottom]
GridLeft = [Monitor1Left]
简单来说,我们首先要告诉 GridMove 一共有多少个区域,然后要为每一个区域分别定义两个矩形的位置和大小,每个矩形要定义上下左右四条线的位置,因而每个区域要写八行。
四行定义四条边的位置,进而界定矩形的位置和大小
第一个 Trigger 矩形是用于触发窗口调整的区域,应用窗口放到这个矩形中会被缩放、移动。Trigger 区域不能重叠;第二个 Grid 矩形是应用最终所占屏幕的空间,Grid 区域可以重叠;每一个显示器都要单独写配置,GridMove 最多只支持三个显示器。
文件中所用的变量以直角括号包围,都非常语义化。保存文件后重启应用就能看到效果。
应用安装目录下的 GridsExample
文件夹是一些用作参考的模板,你可以从这些文件中学习如何自定义布局。
高级设置
点击「选项」>「更多选项」可以打开 GridMove 的配置文件。如果应用出现问题,删除此文件后重启一般能解决问题。
这个配置文件提供一些不方便设置 GUI 的选项,例如:
Gap
:控制不同 Grid 间的空隙,但不建议设置为 0。TIM,微信等不使用标准窗口框架的应用,空隙会异常;NoTrayIcon
:控制是否显示托盘图标;Exceptions
:如果「过滤窗口」功能有问题,可以在此处手动填写。这里是不需要控制的应用的 Class,Window Class 可通过 AHK 组件 Window Spy 获取,以逗号分隔。
总结
如何有效利用多显示器和大屏幕?开放自由的 Linux 已然交出趋近于满分的答卷:i3、xmonad 等平铺式窗口管理器羡煞了 Windows 用户。尽管 Windows 平台上已有数个模仿者,但项目工程量大、维护人手不足的同时商业化困难,使用门槛高、配置繁杂的同时效果却只能做到差强人意,效颦之作不少折戟沉沙。
在厌倦了多个尚不完善的窗口管理器后,我只得退而求其次,在前人的基础上敲敲打打做出了 GridMove。它小巧灵活,高效可靠,已经默默地陪伴我大半年,我也希望它能帮助到你。