WinSetRegion

将指定窗口的形状改为指定的矩形, 椭圆或多边形.

WinSetRegion Options, WinTitle, WinText, ExcludeTitle, ExcludeText

参数

Options

类型: 字符串

如果为空或省略, 则窗口恢复到其原始/默认显示形状. 否则, 可指定以下一个或多个选项, 每个选项之间用空格分隔:

Wn: 矩形或椭圆的宽度. 例如: w200.

Hn: 矩形或椭圆的高度. 例如: h200.

X-Y: 每一个都是一对 X/Y 坐标. 例如, 200-0 将使用 200 作为 X 坐标, 0 作为 Y 坐标.

E: 设置窗口形状为椭圆形而不是矩形. 此选项仅在同时指定了 WH 时才有效.

R[w-h]: 设置窗口形状为圆角矩形. 例如, R30-30 表示每个角为 30x30 的椭圆. 如果 w-h 省略, 则使用 30-30. R 仅在同时指定了 WH 时才有效.

矩形或椭圆形: 如果指定了 WH 选项, 那么会设置新显示的局域为矩形, 且其左上角的坐标为首个(且唯一) X-Y 坐标对. 但是, 如果同时指定了 E 选项, 那么会设置窗口形状为椭圆形而不是矩形. 例如: WinSetRegion "50-0 W200 H250 E", WinTitle.

多边形: 如果 WH 选项都不存在时, 新的显示区域将是由多个 X-Y 坐标对决定的多边形(每对坐标是窗口内相对于其左上角的一个点). 例如, 如果指定了三对坐标, 那么在多数时候窗口形状会被设置为三角形. 坐标对彼此间的相对顺序有时很重要. 此外, 可以在 Options 中指定单词 Wind 从而使用缠绕法代替变换方法来确定多边形的形状.

WinTitle

类型: 字符串, 整数对象

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

WinText

类型: 字符串

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

ExcludeTitle

类型: 字符串

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

ExcludeText

类型: 字符串

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

错误处理

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

如果一个或多个 Options 无效, 或指定的坐标超过 2000 对, 则抛出 ValueError.

如果指定的区域无效或无法应用于目标窗口, 则抛出 OSError.

备注

鼠标光标下的窗口的 ID 可以使用 MouseGetPos 来获取.

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

当为脚本所拥有的窗口设置了一个区域时, 系统可能会自动改变渲染窗口框架的方法, 从而改变其外观. 其效果类似于下面所示的解决方法 #2, 但只影响窗口, 直到其区域被重置.

已知限制: 为不属于脚本的窗口设置一个区域可能会产生意想不到的结果, 如果该窗口有标题(标题栏), 并且系统启用了桌面合成. 这是因为可见的框架实际上并不是窗口的一部分, 而是由一个名为 "桌面窗口管理器" 的单独系统进程渲染的. 注意, 在 Windows 8 及以后的版本中, 桌面合成始终处于启用状态. 可以使用以下两种解决方法之一:

; #1: 移除窗口标题.
WinSetStyle "-0xC00000", "Window Title"

; 恢复:
WinSetStyle "+0xC00000", "Window Title"
; #2: 禁用 DWM 渲染窗口的框架.
DllCall("dwmapi\DwmSetWindowAttribute", "ptr", WinExist("Window Title")
  , "uint", DWMWA_NCRENDERING_POLICY := 2, "int*", DWMNCRP_DISABLED := 1, "uint", 4)

; 恢复(这也可能导致任何设置的区域被忽略):
DllCall("dwmapi\DwmSetWindowAttribute", "ptr", WinExist("Window Title")
  , "uint", DWMWA_NCRENDERING_POLICY := 2, "int*", DWMNCRP_ENABLED := 2, "uint", 4)

Win 函数, Control 函数

示例

使记事本在此矩形之外的所有部分都不可见.

WinSetRegion "50-0 W200 H250", "ahk_class Notepad"

与上面相同, 不过带有 40x40 的圆角.

WinSetRegion "50-0 W200 H250 R40-40", "ahk_class Notepad"

创建椭圆形窗口.

WinSetRegion "50-0 W200 H250 E", "ahk_class Notepad"

创建倒三角形窗口.

WinSetRegion "50-0 250-0 150-250", "ahk_class Notepad"

将窗口恢复原来/默认的形状.

WinSetRegion , "ahk_class Notepad"

它在记事本(或任何其他窗口) 内创建一个透明的矩形孔. 下面指定了两个矩形: 一个外部的, 一个内部的. 每个矩形由 5 对 X/Y 坐标组成, 因为第一对是用来 "闭合" 每个矩形的重复坐标.

WinSetRegion "0-0 300-0 300-300 0-300 0-0   100-100 200-100 200-200 100-200 100-100", "ahk_class Notepad"
unixetc