AutoHotKey - 如何在运行某些操作后再次聚焦于窗口

AutoHotKey - 如何在运行某些操作后再次聚焦于窗口

我使用 AHK 1.1 将 capslock 设置为热键以切换 ArtRage 全屏模式(工作台模式),我这样做是因为 ArtRage 不允许我将 CapsLock 设置为热键,但我习惯在许多程序中使用该键来执行此操作,所以我认为 AHK 可以帮助我。

我尝试了这个并且成功了:

;   AR4 Toggle Workbench Mode
If WinActive("ahk_class ArtRage 3")

Capslock::
Sleep 20
Send {SC037 Down}   ;   NumpadMult
Sleep 10
Send {SC037 Up} ;   NumpadMult
Sleep 90
WinActivate, ahk_class ArtRage 3
return

#If

因此脚本运行良好,但不知何故 ArtRage 窗口失去了焦点,我的意思是我仍然看到 ArtRage 窗口,但我注意到它失去了焦点,因为如果我想#If WinActive("ahk_class ArtRage 3")在上述脚本完成后立即运行另一个 AHK 热键(仅运行),它不会检测到 ArtRage 窗口已打开,因此它不会运行,除非我手动单击 ArtRage 窗口。

我尝试在Capslock(切换工作台模式)完成后再次聚焦,但WinActivate, ahk_class ArtRage 3没有重新聚焦到 ArtRage 窗口,在 AHK 中没有其他方法可以重新聚焦到窗口吗?

已编辑 >>> 我怎样才能IfWinExist("ahk_class ArtRage 3")在一系列动作的末尾放置一个?因为我不能直接在我的 AHK 脚本上运行它,因为它总是会聚焦于 ArtRage,即使我在其他应用程序中工作,对吗?我试过了,但它的语法不正确,你能发个例子吗?

#If WinActive("ahk_class ArtRage 3")

Capslock::
Send {SC037 Down}   ;   NumpadMult
Sleep 30
Send {SC037 Up} ;   NumpadMult
Sleep 30
IfWinExist("ahk_class ArtRage 3")
    WinActivate, ahk_class ArtRage 3
return

#If

答案1

尝试这个(首先作为独立脚本):

;   AR4 Toggle Workbench Mode
#If WinActive("ahk_class ArtRage 3")

    Capslock::
    KeyWait, Capslock   ;  wait until Capslock is released 
    Sleep 20
    Send {NumpadMult}
    Sleep 90
    If !WinActive("ahk_class ArtRage 3")  ;  means: IfWinNotActive
    {
        Loop
        {           
            ;  Which window becomes active in this case?
            WinGetTitle, ActiveTitle, A
            WinGetClass, ActiveClass, A
            ToolTip, Active Window:`n%ActiveTitle%  ahk_class %ActiveClass%
            WinActivate, ahk_class ArtRage 3
            Sleep 50
            If WinActive("ahk_class ArtRage 3")
            {
                ToolTip
                break
            }                   
        }
    }
    return

#If

Esc:: ExitApp

相关内容