He creado el siguiente script en un intento de tener una tecla de acceso rápido que inicie la calculadora o, si ya está abierta, "active" la ventana o, si ya está activada, cierre la calculadora. Todo funciona bien, acepte que si la calculadora está minimizada no puede restaurarla. Por lo que puedo decir he hecho todo bien. No entiendo cuál es el problema. La documentación de AHK afirma que si llama a WinActivate en una ventana minimizada, primero restaurará esa ventana, pero eso es mentira. Si descomento la línea MsgBox, todavía recibo un mensaje cuando la ventana está minimizada, pero no puedo hacer nada más.
If WinExist("Calculator") {
;MsgBox Calculator Exists.
IfWinActive
WinKill
Else
WinGet, winState, MinMax
If (winState = -1)
WinRestore, Calculator
WinActivate, Calculator
}
Else {
run calc
WinActivate, Calculator
}
Respuesta1
¿En qué sistema operativo estás? Su código me funciona en Win10 si agrego ahk_class al título:
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
}
Respuesta2
Esto es lo que tengo para trabajar para mí.
;------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
Yo suelo usar:
;------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
Pero esta solución requirió que a menudo tuviera que presionar la tecla de acceso rápido dos veces. Una vez para activarlo (si no estaba en la parte superior, incluso todavía es visible) y luego otra vez para minimizarlo. Espero que esto ayude a alguien.