# WinSet

对匹配指定条件的窗口进行一系列的设置，例如设置“总在最前”，以及透明度等。

WinSet, Attribute, Value [, WinTitle, WinText, ExcludeTitle, ExcludeText]

#### 参数

Attribute, Value | 查看下面的列表。
WinTitle | 目标窗口的标题或标题中的部分文字（匹配模式由 SetTitleMatchMode 决定）。如果省略后面 3 个参数，默认目标是 上一次匹配的窗口 。如果这个参数使用字母 A ，同时省略后面 3 个参数，则以当前激活的窗口作为目标。要用窗口的 class 名进行匹配，使用 ahk_class 精确 class 名（Window Spy 中可以显示 class 名）。要用窗口的 进程标识符（PID）进行匹配，使用 ahk_pid %PID变量% 。要用 窗口组 ，使用 ahk_group 组名 。要用窗口的 唯一 ID 进行匹配，使用 ahk_id %ID变量% 。要减小检测范围，使用 多重条件 ，例如：My File.txt ahk_class Notepad
WinText | 如果使用这个参数，则它应该是目标窗口中某个文本元素的子字符串（在 Window Spy 中会显示出窗口中的文本元素）。隐藏文本只有在 DetectHiddenText 设置为 ON 的时候才能检测到。
ExcludeTitle | 标题中包含该参数指定的文字的窗口将被除外。
ExcludeText | 文本元素中包含该参数指定的文字的窗口将被除外。

#### Attribute, Value

AlwaysOnTop, [On|Off|Toggle]：让一个窗口处于置顶状态。使用 ON 开启设置，使用 OFF 关闭设置，使用 TOOGLE 切换设置。如果省略，默认是 TOOGLE。也可以使用单词 Topmost 替换 AlwaysOnTop。

Bottom：将一个窗口放到最底端，也就是所有窗口的下面。这个效果类似使用 Alt－Escape 快捷键。例如：WinSet, Bottom,, WinTitle

Top：将一个窗口放到最前端而不进行 激活 。但是，大多数情况下系统都会自动激活它。另外，当系统禁止切换窗口焦点的时候该命令可能没有效果（这取决于当前窗口类型以及用户当前的操作）。要应付这种情况，可以让窗口暂时 置顶 ，再取消置顶。

Disable 或 Enable：停用或启用一个窗口。当一个窗口处于停用状态的时候，用户不能移动它或利用它的控件进行交互。另外，停用的窗口也不会出现在 alt-tab 列表中。

Redraw：通过通知系统某个窗口区域需要重绘，来刷新一个窗口的界面和内容。如果对某个窗口不起作用，尝试 WinMove 。如果还不起作用，尝试：
WinHide, WinTitle
WinShow, WinTitle

Style,N 或 ExStyle,N：分别设置窗口的样式或扩展样式。如果 N 中的第一个字符是加号或减号，则窗口会增加或移除 N 中指定的样式（可同时指定多个样式，下同）；如果第一个字符是符号“`”，窗口将对 N 中指定的样式进行切换操作；如果第一个字符是数字，窗口原来的所有样式将被覆盖，彻底变成 N 中指定的样式。

如果样式设置失败，ErrorLevel/错误等级 设置为 1 ，成功为 0 。当没有匹配窗口或窗口不能应用指定的样式的时候（一般发生在 Windows 9x 中）会设置失败。

更改了一个窗口的样式之后，可能需要对窗口进行重绘，使用命令 WinSet Redraw （具体见下面）。最后，一些常用的样式代码可以参看 样式列表 。一些例子：

    WinSet, Style, -0xC00000, A  ; 移除当前激活窗口的标题栏（WS_CAPTION）。
    WinSet, ExStyle, ^0x80, WinTitle  ; 切换窗口的 WS_EX_TOOLWINDOW 属性，可以将窗口添加到/移除于 alt-tab 列表中。

#### WinSet, Region [, Options, WinTitle, ...]

更改一个窗口的形状为指定的方形，椭圆形，或多边形。如果 Options 参数留空，窗口将恢复到原来的形状。否则，可以指定下面的一个或多个参数，用空格分隔：

Wn：方形或椭圆形的宽度。例如：w200
Hn：方形或椭圆形的高度。例如：h300
X-Y：X轴 和 Y轴 坐标。例如，200-0 中的 200 表示 X轴 坐标，0 表示 Y轴 坐标。
E：将窗口形状设置为椭圆形，而不是方形。这个参数只有在同时指定了 W 和 H 参数的时候才有效。
R[w-h]：设置方形窗口的圆角。例如，R30-30 表示圆角大小为 30x30 。如果省略 w-h ，默认使用 30-30 。R 参数只有在同时指定了 W 和 H 参数的时候才有效。

方形或椭圆形：如果同时指定了 W 和 H 参数，窗口的形状将变成方形，方形区域左上角的位置坐标为 X-Y 参数指定的坐标（以窗口左上角为原点）。但是，如果同时使用了 E 参数的话，窗口的形状将变成椭圆形。例如：WinSet, Region, 50-0 W200 H250 E, WinTitle

多边形：如果同时指定了 W 和 H 参数，并且在 X-Y 参数中指定了多组坐标，窗口的形状将变成多边形（每组坐标以窗口左上角为原点）。例如，如果指定了 3 组坐标，大多数情况下窗口的形状会变成三角形，具体的形状取决于 3 组坐标的顺序。此外，在 Options 参数中也可以加上单词 Wind ，这将会使用一种弯曲的方式来决定多边形的形状。

如果形状设置失败，ErrorLevel/错误等级 设置为 1 ，成功为 0 。失败的原因有：1）没有匹配窗口；2）Options 中有一个或多个参数无效；3）指定了超过 2000 组坐标；4）指定的形状无效或不适用与目标窗口。

更多示例请查看本页最下方的示例代码。

#### WinSet, Transparent, N, WinTitle

设置窗口为半透明状态。指定 N 为一个 0 到 255 的数字来表示透明度：0 表示完全透明，255 表示完全不透明。使用单词 OFF 彻底关闭窗口的透明效果。和设置透明度为 255 不同，使用 OFF 会提升系统性能并降低系统资源的占用。

已知的关于透明度和 TransColor/透明色 的限制：

- 在 Windows 9x 和 NT4 上无效。
- 对于没有标题栏并且没有 总在最前 属性的窗口无效。对于 图形界面窗口，可以在设置了窗口透明之后再移除标题栏。另外，下面的属性设置也可以让窗口设置透明度：Gui -Caption +ToolWindow.
- 设置透明度为 OFF 之前最好先设置透明度为 255 ，这样可以避免窗口的重绘问题，例如背景变黑。如果窗口仍然不能正确的重绘，参看下面有关 Redraw/重绘 的说明。
- 要更改窗口当前的 TransColor/透明色 ，最好先关闭窗口透明。

小贴士：要设置任务栏的透明度，使用 WinSet, Transparent, 150, ahk_class Shell_TrayWnd 。类似的，要设置开始菜单的透明度，参照这个例子：

    DetectHiddenWindows, on
    WinSet, Transparent, 150, ahk_class BaseBar  ; 要让开始菜单的子菜单也透明，继续加入下面的代码。

要让当前选择的菜单或系统所有的菜单透明，运行下面这个脚本。注意虽然这个脚本不能让它自己的菜单透明，但是可以让其它脚本的菜单透明：

    #Persistent
    SetTimer, WatchForMenu, 5
    return  ; 结束自动运行区域。

    WatchForMenu:
    DetectHiddenWindows, on  ; 以立即检测到菜单。
    IfWinExist, ahk_class #32768
        WinSet, Transparent, 150  ; 使用上一行找到的窗口。
    return

#### WinSet, TransColor, Color [N], WinTitle

让目标窗口中所有符合指定颜色的区域完全透明（在 Windows 9x 和 NT4 中无效）。如果用户点击窗口中的透明部分，点击事件会“穿透”该窗口传递给下面的窗口。Color 参数可以是一个颜色名称或一个 RGB 值（关于颜色详细请参看 颜色图表 ，或者使用 PixelGetColor 的 RGB 模式）。要让目标窗口中符合指定颜色的区域半透明，在颜色参数之后添加一个表示透明度的数字（0 - 255）。例如：WinSet, TransColor, EEAA99 150, WinTitle

TransColor/透明色 常被用来制作屏幕菜单（OSD）或窗口特效。有一个关于屏幕菜单的例子在 Gui 命令帮助页的最下面 。

单词 OFF 用来完全关闭窗口的透明设置。下面两个脚本的功能是一样的：
WinSet, Transparent, Off, WinTitle
WinSet, TransColor, Off, WinTitle

已知的限制：参看 上面的列表 。

#### 注意

除了上面明确说明的地方外，ErrorLevel/错误等级 不会被该命令修改。

虽然 Windows 2000/XP 及之后的系统都支持设置透明，但是只有 XP 之后的系统才能获取到窗口的透明度设置（通过 WinGet 命令）。

可以用下面的脚本取消一个脚本的 SplashText 窗口的置顶状态：
WinSet, AlwaysOnTop, Off, My Splash Window Title

窗口的标题和窗口中的文字是大小写敏感的。要检测隐藏窗口，必须打开 DetectHiddenWindows 。

#### 相关命令

WinGet, WinHide, WinSetTitle, WinMove, WinActivate, Control

#### 示例

    WinSet, Transparent, 200, Untitled - Notepad ; 让窗口稍微有点透明效果
    WinSet, TransColor, White, Untitled - Notepad ; 让窗口中白色的部分透明
    WinSet, AlwaysOnTop, toggle, Calculator ; 切换计算器的“总在最前”状态

    ; 长一点的例子：
    ; 这里有一些快捷键用来演示“Transparent/透明度”和“TransColor/透明色”的效果
    ; 注意：如果你按下快捷键的时候鼠标正指在 TransColor/透明色
    ; 设置的窗口透明部分上，则快捷键影响的就是透明窗口下方的窗口。
    ; 同样，快捷键 Win + G 只有在 Windows XP 上才有效果，
    ; 因为 Windows 2000 不能获取窗口的透明设置

    #t::  ; 快捷键 Win+T 让窗口中符合鼠标所指颜色的部分透明
    MouseGetPos, MouseX, MouseY, MouseWin
    PixelGetColor, MouseRGB, %MouseX%, %MouseY%, RGB
    ; 设置新的透明效果之前需要关闭窗口当前的透明效果
    WinSet, TransColor, Off, ahk_id %MouseWin%
    WinSet, TransColor, %MouseRGB% 220, ahk_id %MouseWin%
    return

    #o::  ; 快捷键 Win+O 关闭鼠标所指窗口的透明效果
    MouseGetPos,,, MouseWin
    WinSet, TransColor, Off, ahk_id %MouseWin%
    return

    #g::  ; 快捷键  Win+G 显示鼠标所指窗口当前的透明效果设置
    MouseGetPos,,, MouseWin
    WinGet, Transparent, Transparent, ahk_id %MouseWin%
    WinGet, TransColor, TransColor, ahk_id %MouseWin%
    ToolTip Translucency:`t%Transparent%`nTransColor:`t%TransColor%
    return

    ; “WinSet Region”的例子
    WinSet, Region, 50-0 W200 H250, WinTitle  ; 让窗口只显示指定的方形部分
    WinSet, Region, 50-0 W200 H250 R40-40, WinTitle  ; 和上面的一样，不过有 40 x 40 的圆角。
    WinSet, Region, 50-0 W200 H250 E, WinTitle  ; 椭圆形窗口
    WinSet, Region, 50-0 250-0 150-250, WinTitle  ; 倒三角形窗口
    WinSet, Region,, WinTitle ; 将窗口恢复原状

    ; 更加复杂的 Region 例子，在窗口中创建了一个方形的“洞”。
    ; 这里指定了 2 个方形，一个内部的一个外部的。每个方形使用 5 组坐标
    WinSet, Region, 0-0 300-0 300-300 0-300 0-0   100-100 200-100 200-200 100-200 100-100, WinTitle