这段代码为什么不能把窗口的透明度设为255?AutoHotKey代码有什么错误?
这是我的AHK代码:
SendMode Input
opacity := 255
^!Up:: ; Ctrl + Alt + Up
opacity += 15
if (opacity > 255)
opacity := 255
WinSet, Transparent, %opacity%, A
return
^!Down:: ; Ctrl + Alt + Down
opacity -= 15
if (opacity < 50) ; Minimum visibility
opacity := 50
WinSet, Transparent, %opacity%, A
return
^!0:: ; Ctrl + Alt + 0 → Reset
opacity := 255
WinSet, Transparent, %opacity%, A
return
这里按下Ctrl + Alt +向上箭头 时,透明度会增加;相反,按Ctrl + Alt +向下箭头 时,透明度会降低。
但是按下Ctrl + Alt + 0时,所选窗口的透明度不会变成255。
请帮我解决。
解决方案
你的脚本维护了一个全局单一的透明度值,适用于当前处于活动状态的任意窗口。当你改变透明度时,它只影响当时处于活动状态的窗口,但存储的该值在所有窗口之间是共享的。如果你把窗口A 的透明度设为150,然后切换到窗口B 再进行调整,窗口B 将从255(或上次使用的值)开始;如果你回到窗口A,它的透明度就会被覆盖。
下面的实现维护了一个按窗口句柄(hwnd)为键的逐窗口透明度表。每个窗口都独立记住自己的透明度。它还会每60秒清理一次已关闭窗口的旧条目,并在首次修改前读取窗口的当前透明度。
SendMode Input
opacity := {}
SetTimer, CleanupOpacityTable, 60000
^!Up:: ;;∙------∙🔥∙(Ctrl + Alt + Up) Increase∙
WinGet, hwnd, ID, A
Gosub, EnsureOpacity
opacity[hwnd] += 15
if (opacity[hwnd] > 255)
opacity[hwnd] := 255
WinSet, Transparent, % opacity[hwnd], ahk_id %hwnd%
Return
^!Down:: ;;∙------∙🔥∙(Ctrl + Alt + Down) Decrease∙
WinGet, hwnd, ID, A
Gosub, EnsureOpacity
opacity[hwnd] -= 15
if (opacity[hwnd] < 50)
opacity[hwnd] := 50
WinSet, Transparent, % opacity[hwnd], ahk_id %hwnd%
Return
^!0:: ;;∙------∙🔥∙(Ctrl + Alt + Zero) Reset∙
WinGet, hwnd, ID, A
opacity[hwnd] := 255
WinSet, Transparent, 255, ahk_id %hwnd%
Return
EnsureOpacity:
if (!opacity.HasKey(hwnd))
{
WinGet, currentOpacity, Transparent, ahk_id %hwnd%
if (currentOpacity = "")
currentOpacity := 255
opacity[hwnd] := currentOpacity
}
Return
CleanupOpacityTable:
for hwnd, val in opacity
{
if !WinExist("ahk_id " hwnd)
opacity.Delete(hwnd)
}
Return
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。