# WinMove

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

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

## 参数

X, Y

  类型: 整数

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

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

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

Width, Height

  类型: 整数

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

WinTitle

  类型: 字符串, 整数或对象

  识别目标窗口的窗口标题或其他条件. 请参阅 WinTitle.

WinText

  类型: 字符串

  如果存在, 此参数必须是目标窗口的单个文本元素的子字符串(和内置的 Window Spy 工具显示的一样). 如果 DetectHiddenText 为 ON, 那么会检测隐藏文本元素.

ExcludeTitle

  类型: 字符串

  标题中含有此参数值的窗口将被排除.

ExcludeText

  类型: 字符串

  文本中含有此参数值的窗口将被排除.

## 错误处理

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

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

## 备注

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

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

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

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

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

## 相关

ControlMove, WinGetPos, WinHide, WinMinimize, WinMaximize, Win 函数

## 示例

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

    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
    }

dftg