WinSet

优质
小牛编辑
129浏览
2023-12-01

对指定的窗口进行各种设置,例如“总在最前面”和透明度。

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

参数

Attribute, Value

请参阅后面的列表.

WinTitle

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

WinText

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

ExcludeTitle

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

ExcludeText

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

Attribute, Value

AlwaysOnTop, [On|Off|Toggle]:让窗口处于置顶状态。使用 ON 打开此设置, 使用 OFF 关闭, 而使用 TOGGLE 切换到当前的相反状态. 如果省略, 默认为 TOGGLE. 可以使用单词 Topmost 代替 AlwaysOnTop.

Bottom: 发送窗口到堆栈的底部; 即在其他所有窗口的下面. 这个效果类似于使用 Alt-Escape. 例如:WinSet, Bottom,, WinTitle

Top: 把窗口带回到堆栈的顶部而不进行 激活. 但是, 在大多数情况下系统默认设置会激活它. 此外, 当操作系统阻止应用程序从用户抢夺焦点时, 此命令可能没有效果 (这可能取决于当前活动窗口的类型和用户当前正在进行的操作这些因素). 一个可能的解决方法是让窗口暂时 AlwaysOnTop, 然后关闭 AlwaysOnTop.

DisableEnable: 分别为禁用或启用窗口. 当窗口被禁用时, 用户不能移动它或与它的控件进行交互. 此外, 被禁用的窗口会从 alt-tab 列表中移除.

Redraw: 通过通知操作系统窗口的矩形框需要重绘来尝试更新窗口的外观/内容. 如果此方法对特殊的窗口无效, 那么尝试使用 WinMove. 如果仍然无效, 那么请尝试使用下面方法:

WinHide, WinTitle
WinShow, WinTitle

Style, N or ExStyle, N:分别改变窗口的样式或扩展样式。如果 N 的首个字符为加号或减号, 那么会添加或移除 N 中的样式. 如果首个字符为脱字符 (^), 那么 N 中的样式会被切换到相反的状态. 如果首个字符为数字, 则窗口样式会被完全覆盖为 N.

如果设置失败, 则 ErrorLevel 被置为 1, 成功则为 0. 没有找到目标窗口或无法应用此样式时会设置失败。

改变可见窗口的某些样式后,可能需要使用 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 表示 X 坐标为 200,Y 坐标为 0。
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 坐标对确定的多边形(每对坐标以窗口左上角为原点)。例如, 如果指定了三对坐标, 那么在多数时候窗口形状会被设置为三角形. 坐标对彼此间的相对顺序有时很重要. 此外,可以在 Options 中指定单词 Wind 从而使用缠绕法代替变换方法来确定多边形的形状。

如果设置失败, 则 ErrorLevel 被置为 1, 成功则为 0. 出现以下情况时会设置失败: 1) 目标窗口不存在; 2) Options 有一个或多个选项无效; 3) 指定了超过 2000 对坐标; 或 4) 指定的形状是无效的或不适用于目标窗口.

请参阅本页底部查看使用此命令的示例.

WinSet, Transparent, N, WinTitle

设置窗口为半透明状态. 指定 N 为介于 0 和 255 之间的数字来表示透明度: 0 表示完全透明, 255 表示完全不透明. 指定单词 OFF 可以完全关闭透明度. 与指定 255 的区别是, 这样可以提升性能并降低系统资源的占用.

Transparent 和 TransColor 的已知限制:

  • 对于没有标题栏且不含 置顶 属性的窗口没有效果. 对于 GUI 窗口, 可以在设置窗口透明度后才移除标题栏. 或者使用下面的属性让透明度生效:Gui -Caption +ToolWindow
  • 在关闭透明度之前设置 "透明度" 为 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

让目标窗口中指定颜色的所有像素透明,这样可以让它后面的窗口内容显示出来。如果用户点击透明部分, 那么点击会 "穿透" 此窗口传递到它后面的窗口. 在 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 或更高版本中支持透明度, 但只有在 Windows 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  ; 与上面相同, 不过带有 40x40 的圆角.
WinSet, Region, 50-0 W200 H250 E, WinTitle  ; 椭圆形窗口
WinSet, Region, 50-0 250-0 150-250, WinTitle  ; 倒三角形窗口.
WinSet, Region,, WinTitle ; 将窗口恢复原来的形状.

; 这是更复杂的形状示例. 它在窗口中创建了可以看透的矩形洞.
; 下面指定了两个矩形: 一个外部的, 一个内部的每个矩形由 5 对
; X/Y 坐标组成, 因为首对是用来 "闭合" 每个矩形的重复坐标.
WinSet, Region, 0-0 300-0 300-300 0-300 0-0   100-100 200-100 200-200 100-200 100-100, WinTitle