Window 透明度变化影响活动 windows

Window transparency changing affecting active windows

我有一个用 AutoHotKey 隐藏 window 的代码:

NumpadEnter::
Trans:=255
Loop
{   
    WinSet, Transparent, %Trans%, A
    Sleep, 20
    Trans-=1
    if(Trans <= 0)
        Break
}
return

效果很好,但是你可以看到这个函数的执行时间大约是 4-5 秒。我不能在这4-5秒内在其他windows之间切换,因为其他windows会受到WinSet功能的影响。

我需要在循环之前将 window 句柄保存到变量。并配合WinSet功能使用就行了

我该怎么做?

一种方法是使用带有 A 选项的 winexist() 函数作为 wintittle 参数,这将为您提供活动 window 的 ID,以便您可以使用它。

像这样

NumpadEnter::
hWnd := WinExist("A")
Trans:=255
Loop
{   
    WinSet, Transparent, %Trans%, Ahk_id %hWnd%
    Sleep, 20
    Trans-=1
    if(Trans <= 0)
        Break
}
return

希望对您有所帮助

编辑:

完整文档: http://www.autohotkey.com/board/topic/80577-how-to-animate-a-gui-window/

编辑 2:

你提到它对你不起作用。这是 工作示例 在 Windows 8 机器上使用 Ahk_L (又名。 Autohotkey_L 或 Autohotkey_Lexiko):

DetectHiddenWindows, On ;//Allow hidden windows to be detectable
SetWinDelay, -1 ;//Make Window update very fast (smooth animation)

FADE       := 524288
SHOW       := 131072
HIDE       := 65536

FADE_SHOW  := FADE+SHOW
FADE_HIDE  := FADE+HIDE

SetFormat, Integer, Hex
FADE_SHOW+=0 ;//Converts to 0xa0000
FADE_HIDE+=0 ;//Converts to 0x90000
SetFormat, Integer, d

Gui, Font, w500 s35 Center, Verdana
Gui, Add, Text, , Hello! This Window will hide in 5 Seconds.
Gui, Show, NA Hide, Test Window ; //Create the Window hidden
Gui, +LastFound
GUI_ID := WinExist() ;//Get Window ID

Duration := 3000 ;//Speed of Window showing/hiding

DllCall("AnimateWindow","UInt",GUI_ID,"Int",Duration,"UInt", FADE_SHOW) ;//Fade in Window
Sleep, 5000 ;//Pause for 5 seconds
DllCall("AnimateWindow","UInt",GUI_ID,"Int",Duration,"UInt", FADE_HIDE) ;//Fade out Window
Return