我正在寻找一种使用 Autohotkyes 将活动窗口置于桌面中央的方法。有人能给我一个可以使用的脚本吗?谢谢
答案1
http://www.autohotkey.com/docs/commands/WinMove.htm是谷歌上第一个包含短语“autohotkey center window”的结果。它可能会帮到你。请参阅示例脚本。
示例脚本
运行,calc.exe WinWait,计算器 WinMove, 0, 0 ;将 WinWait 找到的窗口移动到屏幕的左上角。 SplashTextOn, 400, 300, 剪贴板, 剪贴板包含:`n%clipboard% WinMove, Clipboard, , 0, 0 ;将启动窗口移动到左上角。 Msgbox,按“确定”关闭 SplashText SplashText关闭 ;下面的函数将指定的窗口置于屏幕的中心: 中心窗口(窗口标题) { WinGetPos,,, 宽度, 高度, %WinTitle% WinMove,%WinTitle%,,(A_ScreenWidth/2)-(宽度/2),(A_ScreenHeight/2)-(高度/2) }
定制
;下面的函数将指定的窗口置于屏幕的中心: 中心窗口(窗口标题) { WinGetPos,,, 宽度, 高度, %WinTitle% WinMove,%WinTitle%,,(A_ScreenWidth/2)-(宽度/2),(A_ScreenHeight/2)-(高度/2) ;Msgbox,制作了记事本中心吗? } 运行,文件.exe CenterWindow("文件标题.exe")
答案2
这些答案使用标题匹配,这可以应用于多个窗口。当您按下 win+c 时,这将仅使活动窗口居中。
#c::
WinExist("A")
WinGetPos,,, sizeX, sizeY
WinMove, (A_ScreenWidth/2)-(sizeX/2), (A_ScreenHeight/2)-(sizeY/2)
return
答案3
为了简单和适应性,我创建了一个额外的超短脚本,它只获取活动窗口并将其居中,但也使用给定的宽度和高度调整其大小。除了晚了几年之外,这可能不是您真正要求的。但是,这是我对分辨率高于 FHD 的操作系统的窗口管理的期望之一。希望其他人需要它。hf
; HOTKEYS
#!Up::CenterActiveWindow() ; if win+alt+↑ is pressed
CenterActiveWindow()
{
windowWidth := A_ScreenWidth * 0.7 ; desired width
windowHeight := A_ScreenHeight ; desired height
WinGetTitle, windowName, A
WinMove, %windowName%, , A_ScreenWidth/2-(windowWidth/2), 0, windowWidth, windowHeight
}
答案4
对于多台显示器,如果你想要一个将窗口置于当前显示器中心的脚本,我发现了这个人的可爱脚本这里在 AutoHotkey.com 论坛上。谢谢 kon!还修复了移动桌面图标的问题。将其设置为仅将具有最小化按钮的窗口居中。获取代码这里来自 AutoHotkey.com 论坛的 SKAN。谢谢 SKAN!
我#c::
在开头添加了 ,以便激活该脚本的热键设置为Windows+ ,我认为这是合适的,因为 Windows 已经允许您使用+C来操作窗口。WindowsArrow Keys
免责声明:
修复了这个问题。谢谢 SKAN!
遗憾的是,这个脚本有一个缺点。如果你在没有活动窗口时使用它,桌面上的快捷方式将暂时重新排列,直到你尝试移动快捷方式。一旦你尝试移动快捷方式,它们都会恢复到原来的位置。我怀疑快捷方式实际上并没有移动,但我实际上并不理解这个脚本,所以我不确定为什么会发生这种情况。在我看来这不是什么大问题,但我想我应该加上免责声明。
#c::
winHandle := WinExist("A") ; The window to operate on
; Don't worry about how this part works. Just trust that it gets the
; bounding coordinates of the monitor the window is on.
;--------------------------------------------------------------------------
VarSetCapacity(monitorInfo, 40), NumPut(40, monitorInfo)
monitorHandle := DllCall("MonitorFromWindow", "Ptr", winHandle, "UInt", 0x2)
DllCall("GetMonitorInfo", "Ptr", monitorHandle, "Ptr", &monitorInfo)
;--------------------------------------------------------------------------
workLeft := NumGet(monitorInfo, 20, "Int") ; Left
workTop := NumGet(monitorInfo, 24, "Int") ; Top
workRight := NumGet(monitorInfo, 28, "Int") ; Right
workBottom := NumGet(monitorInfo, 32, "Int") ; Bottom
WinGetPos,,, W, H, A
WinGet, Style, Style, A
If ( Style & 0x20000 ) ; WS_MINIMIZEBOX
{
WinMove, A,, workLeft + (workRight - workLeft) // 2 - W // 2, workTop + (workBottom - workTop) // 2 - H // 2
}