这段代码为什么不能把窗口的透明度设为255?AutoHotKey代码有什么错误?

编程语言 2026-07-10

这是我的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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章