Autohotkey не восстанавливает/не активирует свернутое окно

Autohotkey не восстанавливает/не активирует свернутое окно

Я создал следующий скрипт в попытке иметь одну горячую клавишу, которая запускает калькулятор или, если он уже открыт, «активирует» окно, или, если он уже активирован, закрывает калькулятор. Все работает нормально, за исключением того, что если калькулятор свёрнут, он не восстанавливает его. Насколько я могу судить, я всё сделал правильно. Я не понимаю, в чём проблема. В документации AHK утверждается, что если вы вызовете WinActivate для свёрнутого окна, он сначала восстановит это окно, но это ложь. Если я раскомментирую строку MsgBox, я всё равно получу сообщение, когда окно свёрнуто, но он бессилен что-либо сделать.

If WinExist("Calculator") {
;MsgBox Calculator Exists.
IfWinActive
    WinKill
Else
    WinGet, winState, MinMax
    If (winState = -1)
        WinRestore, Calculator
    WinActivate, Calculator
}
Else {
    run calc
    WinActivate, Calculator
}

решение1

Какая у вас ОС? Ваш код работает у меня на Win10, если я добавлю ahk_class в заголовок:

If WinExist("Calculator ahk_class ApplicationFrameWindow") 
{
    ;MsgBox Calculator Exists.
    IfWinActive
        WinClose
    Else
    {
        WinGet, winState, MinMax
        If (winState = -1)
        {
            WinRestore
            WinActivate
        }
    }
}
Else 
{
    run calc
    WinWait, Calculator
    WinActivate
}

решение2

Это то, что мне пришлось сделать для работы.

;------hotkey to open/close explorer------
^LWin:: ;control and leftwindows
if WinExist("ahk_class ActualTools_TabbedExplorerContainerWindow"){ ; if the window exists
    if WinActive("ahk_class ActualTools_TabbedExplorerContainerWindow") or WinActive("ahk_exe Explorer.EXE")
        WinMinimize, ahk_class ActualTools_TabbedExplorerContainerWindow 
    else{
        WinActivate ; otherwise make it the active window
    }
}else
    run, explorer.exe ;otherwise not open, open explorer
return

Я использую:

;------hotkey to open/close explorer------
^LWin:: ;control and leftwindows
;WinGetClass, Clipboard, A ;Use this to get the name(class?) of the window you want the script to open. https://stackoverflow.com/questions/45642727/what-is-ahk-class-how-can-i-use-it-for-window-matching
if WinExist("ahk_class ActualTools_TabbedExplorerContainerWindow"){ ; if the window exists
        WinGet, state, MinMax ;get the state of the window. is it maximized or minimized. this could be part of the issue
        If state >= 0 ; if its not minimized, minimize it
            WinMinimize
        else
            WinActivate ; otherwise make it the active window
}else
    Run, Explorer.exe ;otherwise not open, open explorer
return

Но это решение требовало от меня частого нажатия горячей клавиши дважды. Один раз, чтобы сделать его активным (даже если он не был сверху, он все равно был виден), а затем еще раз, чтобы свернуть его. Надеюсь, это кому-то поможет.

Связанный контент