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

DisableEnable:停用或启用一个窗口。当一个窗口处于停用状态的时候,用户不能移动它或利用它的控件进行交互。另外,停用的窗口也不会出现在 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:将窗口形状设置为椭圆形,而不是方形。这个参数只有在同时指定了 WH 参数的时候才有效。
R[w-h]:设置方形窗口的圆角。例如,R30-30 表示圆角大小为 30x30 。如果省略 w-h ,默认使用 30-30 。R 参数只有在同时指定了 WH 参数的时候才有效。

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

多边形:如果同时指定了 WH 参数,并且在 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/透明色 的限制:

小贴士:要设置任务栏的透明度,使用 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