文章目录
- 实现方法
- 代码讲解
- WinGet和WinSet
注 本文采用的是V1版本语法
实现方法
窗口透明不仅实用性强,关键是非常炫酷,如果用AHK实现一个实时调节窗口透明度的工具,那么就可以一边敲代码,一边透过半透明的IDE,愉快地摸鱼了。而实现方法也非常简单,只需下面这几行代码
#=:: ;窗口透明化增加或者减弱
WinGet, ow, id, A
chWinTrans(ow, 10)
return
#-:: ;窗口透明化增加或者减弱
WinGet, ow, id, A
chWinTrans(ow, -10)
return
chWinTrans(w, i){
WinGet, t, Transparent, ahk_id %w%
t += i
if t > 255 or t<0
t := 255
WinSet, Transparent, %t%, ahk_id %w%
return
}
其实现效果如下
代码讲解
首先,绑定🪟=
和🪟-
分别用于调节窗口的透明度,这两个快捷键所绑定的脚本几乎相同,都调用了chWinTrans
函数,区别只是其中一个用到的参数是10,而另一个是-10而已。
而chWinTrans
的逻辑也非常简单,首先用WinGet函数获取当前的透明度,然后加上传入的数值。如果加上传入的数值在255和0之间,就将窗口透明度更改为新的值,否则就重置为255,即不透明。
这样可能会导致一个结果,即没法让窗口完全不透明,这也是出于安全考虑,毕竟窗口变成全透明的,在界面上无法找到,就很悲剧。如果非要实现,只需把判断语句稍作修改就行了
if t>255
t := 255
if t < 0
t := 0
WinGet, ow, id, A
用于将窗口id赋值给ow
,A
表示当前活动窗口。
WinGet和WinSet
在上述代码中,用到了一个WinGet
和WinSet
函数,对初学者来说相对比较陌生,但从其名字的对偶性可以推测,前者用于获取窗口信息,后者用于设置窗口属性,二者定义如下
WinGet, OutputVar , [SubCommand, WinTitle, WinText, ExcludeTitle, ExcludeText]
WinSet, SubCommand, Value , [WinTitle, WinText, ExcludeTitle, ExcludeText]
被方括号圈起来的部分表示非必要参数。
WinGet
用于获取属性,所以需要有一个输出,即OutPutVar
。WinSet
用于设置属性,所以需要有一个设置值,即Value
,除此之外,二者的参数几乎都是相同的。
其中SubCommand
为子命令,可选以下指令
指令 | Get | Set | 说明 |
---|---|---|---|
ID | ✔️ | ❌ | 获取窗口的唯一 ID 号. |
IDLast | ✔️ | ❌ | 如果找到多个匹配窗口, 它会获取最后的/最下面的窗口唯一 ID. |
PID | ✔️ | ❌ | 获取窗口的进程 ID. |
ProcessName | ✔️ | ❌ | 获取拥有窗口的进程名. |
ProcessPath | ✔️ | ❌ | 获取拥有窗口的进程的完整路径和名称. |
Count | ✔️ | ❌ | 获取与标题/文本参数匹配的现有窗口的数量. |
List | ✔️ | ❌ | 与标题/文本参数相匹配的所有现有窗口的唯一 ID 号. |
MinMax | ✔️ | ❌ | 获取窗口的最小化/最大化状态. |
ControlList | ✔️ | ❌ | 获取窗口中每个控件的控件名. |
ControlListHwnd | ✔️ | ❌ | 获取窗口中每个控件的唯一 ID 号. |
Transparent | ✔️ | ✔️ | 获取窗口的透明度的等级. |
TransColor | ✔️ | ✔️ | 获取在窗口中标记为透明的颜色. |
Style | ✔️ | ✔️ | 获取表示窗口样式的 8 位十六进制数字. |
ExStyle | ✔️ | ✔️ | 获取表示窗口扩展样式的 8 位十六进制数字. |
AlwaysOnTop | ❌ | ✔️ | 让窗口处于置顶状态. |
Bottom | ❌ | ✔️ | 发送窗口到堆栈的底部; 即在所有其他窗口的下面. |
Top | ❌ | ✔️ | 把窗口带回到堆栈的顶部而不进行激活. |
Disable | ❌ | ✔️ | 禁用窗口. |
Enable | ❌ | ✔️ | 启用窗口. |
Redraw | ❌ | ✔️ | 重绘窗口. |
Region | ❌ | ✔️ | 改变窗口的形状为指定的矩形, 椭圆形或多边形. |