需要 Autohotkey 将活动窗口置于中心

需要 Autohotkey 将活动窗口置于中心

我正在寻找一种使用 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
}

相关内容