2024年如何使用AutoHotKey将屏幕上的任何窗口居中

莱科网
预计阅读时长 18 分钟
位置: 首页 软件教程 正文
第一行获取活动窗口的标题。 第二行读取它的宽度和高度,并将它们映射到单词/变量“宽度”和“高度”,接下来我们将使用它们进行计算。

我们得到了活动窗口的详细信息,但我们还需要监视器的可见区域的尺寸来实现我们的目标。 值得庆幸的是,找到这些更容易。

主监控区域呢?:

我们不需要额外的命令来找到我们的主显示器的宽度和高度。 AutoHotKey 带有两个已经为我们包含该信息的预设变量:“A_ScreenWidth”和“A_ScreenHeight”。

2024年如何使用AutoHotKey将屏幕上的任何窗口居中

因此,当您在下一节中看到它们时,它们已经“包含”了主监视器的宽度和高度。 无需为它们分配正确的值。 因此,我们可以直接在计算中使用它们。

计算目标位置的时间:

我们可以将计算直接包含在我们需要它们的脚本点中。 尽管如此,如果我们将它们映射到两个变量和 然后 在我们的脚本中使用这些变量。

因此,让我们选择“TargetX”作为将保持水平坐标的变量,将“TargetY”作为具有垂直坐标的变量,我们应该在其中移动窗口以使其显示在屏幕中心。

TargetX := (A_ScreenWidth/2)-(Width/2) ; Here we calculate the horizontal window target...
TargetY := (A_ScreenHeight/2)-(Height/2) ; ...and here the vertical one.
登录后复制

让我们用简单的英语解读这些行:

“TargetX”和“TargetY”是两个变量。 “:=” 通知 AutoHotKey 变量应该等于右边的计算结果,并且这些结果应该被视为数字。 “(A_ScreenWidth/2)” 将整个显示器的宽度除以 2。 “(Width/2)” 对活动窗口的宽度做同样的事情。

有了上面,我们从屏幕宽度的一半中减去活动窗口宽度的一半。 剩下的是窗口左侧的空间 – 从屏幕左侧到窗口应该出现的位置。 第二行做同样的事情,但高度。

现在重新定位窗口:

配备从我们上面看到的神秘命令中获得的全能知识,我们现在可以制作完成窗口传送仪式的魔法咒语。 或者,简单地说,使用 AutoHotKey 的“WinMove”命令在屏幕上移动窗口。

WinMove 期望我们向它“提供”至少三个信息来完成它的工作:目标窗口的标题和移动它的坐标。 由于我们已经将这些信息映射到变量,因此命令很简单:

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%
登录后复制

在上面:

“WinMove”是移动窗口的 AutoHotKey 命令。 “%ActiveWindowTitle%”是活动窗口标题映射的变量。 “%TargetX%”和“%TargetY%”是移动窗口的水平和垂直坐标。

您还可以使用 WinMove 调整窗口大小,跳过标题或内容中带有特定文本字符串的窗口等。由于这些功能超出了本文的范围,请查看 AutoHotKey 关于 WinMove 命令的官方文档以了解更多信息。

最终剧本:

最后,我们到达了旅程中最具挑战性的部分。 为下一步做好准备,希望您保存脚本,然后……运行它。

是的,就是这样 – 脚本已经完成,除了试一试之外别无他法。 使用您定义的快捷方式,任何活动窗口都会移动到屏幕的中心。

在文本编辑器中打开的最终脚本文件应如下所示:

; 
SendMode Input  ; Recommended fornew scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
^y::
WinGetTitle, ActiveWindowTitle, A ; Get the active window's title for "targetting" it/acting on it.
WinGetPos,,, Width, Height, %ActiveWindowTitle% ; Get the active window's position, used for our calculations.
TargetX := (A_ScreenWidth/2)-(Width/2) ; Calculate the horizontal target where we'll move the window.
TargetY := (A_ScreenHeight/2)-(Height/2) ; Calculate the vertical placement of the window.
登录后复制

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; Move the window to the calculated coordinates.

登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制

return

登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制

请注意,您可以复制上面的脚本,将其粘贴到记事本或类似的文本编辑器中,然后使用 AHK 扩展名保存。 然后,在安装 AutoHotKey 的情况下“运行”它,以便在您按下 CTRL + Y 时将任何窗口居中。如果您不喜欢该快捷方式,请将“^y::”行调整为不同的组合键。 例如, !+c:: 会将函数映射到 Shift + Alt + C 组合键。

轨道

为了您的方便,我们决定召唤并包含一个辅助脚本,该脚本将对具有双显示器设置的用户有用。

为了简化本文,我们以注释的形式包含了有关脚本如何在其中工作的信息。 您可以从迭代中删除它们。

它与上面脚本的不同之处在于我们还添加了一个 PositionToggle 变量和一些“IF 逻辑”。 然后我们使用它们在监视器之间“轻弹”窗口。 我们应该注意到,这是一个不雅且“hack-y”的问题解决方案。 但是,我们更喜欢它而不是更简化的代码,因为这种方法对于不熟悉 AutoHotKey 的每个人来说更容易理解和调整。

; 
SendMode Input  ; Recommended fornew scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
PositionToggle = 1 ; Use a numberas a toggle for marking on which monitor the window should appear.
^y::
WinGetTitle, ActiveWindowTitle, A
WinGetPos,,, Width, Height, %ActiveWindowTitle%
登录后复制

If PositionToggle = 1 ; Check the toggle’s state and “do what’s between the curly brackets” if it’s setto1for our primary monitor.
{
TargetX := (A_ScreenWidth/2)-(Width/2)
TargetY := (A_ScreenHeight/2)-(Height/2)
PositionToggle = 2 ; “Flick“ the toggle so that if we reuse the hotkey, our active window will move to the second monitor.
}
Else If PositionToggle = 2 ; Have we used the hotkey before, “flicking“ the toggle number to the second monitor? Then the script should instead do what‘s between the following curly brackets instead of the ones above.
{
SysGet, Mon2, Monitor, 2 ; Get the second monitor‘s details
Mon2Width := Mon2Right – Mon2Left ; Calculate the second monitor‘s actual width.
Mon2Height := Mon2Bottom – Mon2Top ; Calculate the second monitor‘s actual height.

登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制

TargetX := (Mon2Width/2)-(Width/2)+A_ScreenWidth ; Calculate where to move the window. Notice that we also add the primary monitor‘s width since AutoHotKey can‘t move windows on individual monitors but across their combined “surface“.
TargetY := (Mon2Height/2)-(Height/2)+Mon2Top ; Calculate the optimal vertical target for moving the window on the second monitor. Like above, the second monitor‘s vertical details are detected in relation to the primary monitor. Thus, we have to get creative to get an optimal target by acknowledging how the second monitor‘s top isn‘t equal to 0 (like the primary one‘s).

登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制

PositionToggle = 1 ; Flick the toggle back so that if we reuse the hotkey, the window will move back to the primary monitor.
}

登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; The actual action, moving the active window to our calculated coordinates.

登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制

return

登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制

用钥匙将窗口居中,简单的方法:

现在你完成了! 如果一切正常,您现在可以随时使用新设置的热键将窗口居中。

本文来自投稿,不代表本站立场,如若转载,请注明出处:
-- 展开阅读全文 --
头像
2024年如何在Windows 11中删除服务
« 上一篇 2024-11-09 07:41:14
2024年如何阻止其他人更改Windows 11快速设置
下一篇 » 2024-11-09 07:44:37
取消
微信二维码
支付宝二维码

热门文章

动态快讯

目录[+]