WinMove

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

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

参数

X, Y

类型: 整数

目标窗口新位置的左上角的 X 和 Y 坐标(单位为像素). 屏幕左上角坐标为 0, 0.

如果这些是函数给出的唯一参数, 那么使用上次找到的窗口为目标窗口.

或者, 可以省略 X 和/或 Y, 此时使用当前位置.

Width, Height

类型: 整数

目标窗口的新宽度和高度(单位为像素). 如果其中一个省略或为空, 那么在这个维度中的大小将保持不变.

WinTitle, WinText, ExcludeTitle, ExcludeText

类型: 字符串, 整数对象

如果这些都未设置或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示). 如果 DetectHiddenText 已经打开, 则检测隐藏文本元素. 标题或文本包含 ExcludeTitleExcludeText 的窗口将不被考虑.

错误处理

如果找不到窗口, 则抛出 TargetError.

如果内部函数调用报告失败, 则抛出 OSError. 但是, 即使窗口没有移动, 也可能报告成功, 例如, 如果窗口限制了自己的移动.

备注

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

x 和 y 坐标中可以使用负数, 这样可以支持多显示器系统且可以让窗口被完全移出屏幕.

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

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

窗口标题和文本是区分大小写的. 除非 DetectHiddenWindows 被打开, 否则不会检测隐藏窗口.

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

ControlMove, WinGetPos, WinHide, WinMinimize, WinMaximize, 窗口函数

示例

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

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

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

MyGui := Gui("ToolWindow -Sysmenu Disabled", "The clipboard contains:")
MyGui.Add("Text",, A_Clipboard)
MyGui.Show("w400 h300")
WinMove 0, 0,,, MyGui.Title ; 移动启动画面到左上角.
MsgBox "Press OK to dismiss the Gui window"
MyGui.Destroy

让指定窗口显示在屏幕中间.

CenterWindow("ahk_class Notepad")

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