1

Я создал следующий скрипт, пытаясь получить одну горячую клавишу, которая запускает калькулятор, или, если он уже открыт, «активирует» окно или, если он уже активирован, закрывает калькулятор. Все работает отлично, примите, что, если калькулятор свернут, он не сможет его восстановить. Насколько я могу сказать, я все сделал правильно. Я не понимаю, в чем проблема. В документации 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
}

2 ответа2

0

Это то, что я должен работать для меня.

;------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

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

0

На какой ОС вы работаете? Ваш код работает для меня на 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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .