WinMove

改变指定窗口的位置和/或大小.

WinMove , X, Y
WinMove , WinTitle, WinText, X, Y, Width, Height, ExcludeTitle, ExcludeText

参数

X, Y

如果其中一个为空或省略, 则不会更改该维度中的位置. 否则, 请指定目标窗口新位置的左上角的 X 和 Y 坐标(单位为像素), 可以为表达式. 屏幕左上角坐标为 0, 0.

如果只指定了这两个参数, 那么使用上次找到的窗口为目标窗口.

WinTitle, WinText, ExcludeTitle, ExcludeText

如果这些都是空白或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示).

ExcludeTitle 和 ExcludeText 可用于根据标题或文本排除一个或多个窗口. 它们的规范类似于 WinTitle 和 WinText, 除了 ExcludeTitle 不识别除窗口标题之外的任何条件.

窗口标题和文本是区分大小写的. 默认情况下, 不检测隐藏窗口, 而检测隐藏文本元素, 除非使用 DetectHiddenWindows 和 DetectHiddenText 进行更改. 默认情况下, 窗口标题必须以指定的 WinTitle 或 ExcludeTitle 开头才能匹配, 除非使用 SetTitleMatchMode 进行更改.

另请参阅下面的已知限制.

Width, Height

如果其中一个为空, 省略或者为单词 DEFAULT, 则不会更改该维度中的尺寸. 否则, 请指定目标窗口的新宽度和高度(单位为像素), 可以为表达式.

备注

如果 Width 或 Height 太小(或为负数), 那么大多数带标题栏的窗口最小尺寸不会小于 112 x 27 像素(不过, 有些类型的窗口的最小的尺寸可能有差异). 如果 Width 或 Height 太大, 那么大多数窗口最大尺寸不会大于超过桌面尺寸大约 12 像素.

负的 X 和 Y 坐标允许使用, 来支持多显示器系统, 并将窗口完全移出屏幕.

尽管 WinMove 不能移动最小化状态的窗口, 不过当 DetectHiddenWindows 设置开启时它可以移动隐藏窗口.

WinMove 移动窗口的速度受 SetWinDelay 影响.

已知限制: 如果 WinTitle 或 WinText 包含 (, [ 或 {, 但是没有闭合对应的右半部分, 例如 WinMove, KEDIT - [, 参数自动解释为一个表达式, 从而导致错误消息. 为了避免这种情况, 可以使用百分号空格前缀强制表达式, 例如 WinMove % "KEDIT - [".

在具有不同 DPI 设置的多个屏幕的系统上, 由于操作系统 DPI 缩放, 返回的位置和大小可能与预期不同.

ControlMove, WinGetPos, WinHide, WinMinimize, WinMaximize, WinSet

示例

打开计算器, 等待它的存在并将其移动到屏幕的左上角.

Run, calc.exe
WinWait, Calculator
WinMove, 0, 0 ; 使用 WinWait 找到的窗口.

创建一个固定大小的弹出窗口, 显示剪贴板的内容, 并将其移动到屏幕的左上角.

SplashTextOn, 400, 300, Clipboard, The clipboard contains:`n%Clipboard%
WinMove, Clipboard, , 0, 0
MsgBox, Press OK to dismiss the SplashText
SplashTextOff

在屏幕上使窗口居中.

CenterWindow("ahk_class Notepad")

CenterWindow(WinTitle)
{
    WinGetPos,,, Width, Height, %WinTitle%
    WinMove, %WinTitle%,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2)
}