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