WinMove

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

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

参数

X, Y

类型: 整数

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

Width, Height

类型: 整数

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

WinTitle, WinText, ExcludeTitle, ExcludeText

类型: 字符串, 整数对象

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

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

窗口标题和文本是区分大小写的. 默认情况下, 不检测隐藏窗口, 而检测隐藏文本元素, 除非使用 DetectHiddenWindowsDetectHiddenText 进行更改. 默认情况下, 窗口标题的任意位置包含 WinTitleExcludeTitle 就能形成匹配, 除非使用 SetTitleMatchMode 进行了更改.

错误处理

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

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

备注

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

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

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

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

在具有不同 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
MsgBox "Press OK to dismiss the popup 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
}