AutoHotKey WinClose com CTRL + W

2

Eu usei o Script WinClose no AutoHotKey para fechar janelas com < kbd> Ctrl + w (^ w). Como o Ctrl + w às vezes já é o atalho para fechar uma janela (ou aba no Firefox), eu mando de novo uma Ctrl + w que termina então em um loop infinito, eu acho. Como posso resolver isso?

Esta é a mensagem de erro:

E este é o meu script:

;;; make the “CTRL+W” key to close window or tab.
; which key to send depends on the application
^w::
IfWinActive ahk_class ATH_Note
{ ; ATH_Note is Windows Mail
; Ctrl+F4
  Send !{F4}
}
IfWinActive ahk_class Notepad
{ ; Alt+F4
  Send !{F4}
}
Else IfWinActive ahk_class Outlook Express Browser Class
{ WinMinimize, A
}
Else IfWinActive ahk_class IrfanView
{ Send {Esc}
 }
Else ; IE, Firefox, Google Chrome, Opera
{  Send ^w
 }
Return
    
por FiveO 17.10.2012 / 10:51

2 respostas

6

Eu tentaria usar as teclas de atalho sensíveis ao contexto em vez de marcar a janela ativa ao pressionar as teclas. Suas outras teclas de atalho ainda funcionam da mesma forma, mas como seus navegadores não são especificados, eles mantêm sua funcionalidade normal. Eu criei a funcionalidade desejada usando o código abaixo:

#IfWinActive ahk_class ATH_Note
  ^w::Send !{F4}
#IfWinActive

#IfWinActive ahk_class Notepad
  ^w::Send !{F4}
#IfWinActive

#IfWinActive ahk_class Outlook Express Browser Class
  ^w::WinMinimize, A
#IfWinActive

#IfWinActive ahk_class IrfanView
  ^w::Esc
#IfWinActive

Se houver algumas teclas de atalho compartilhadas entre os programas, você também poderá criar grupos:

GroupAdd, FileExplorer, ahk_class EVERYTHING
GroupAdd, FileExplorer, ahk_class CabinetWClass
GroupAdd, FileExplorer, ahk_class #32770

#IfWinActive ahk_group FileExplorer
    ^w::WinMinimize, A
#IfWinActive
    
por 18.10.2012 / 17:02
0

Como eu posso ver, você não tem return na declaração if, então isso significa que o loop irá falhar até que o seu script falhe, você também tem que usar else return, ... tente essa abordagem.

Editado:

    $^w::
IfWinActive ahk_class ATH_Note
{ ; ATH_Note is Windows Mail
; Ctrl+F4
  Send !{F4}
}
IfWinActive ahk_class Notepad
{ ; Alt+F4
  Send !{F4}
}
Else IfWinActive ahk_class Outlook Express Browser Class
{ WinMinimize, A
}
Else IfWinActive ahk_class IrfanView
{ Send {Esc}
 }  
else
{
Send ^{w}
return
}
Return

Use $ para evitar o acionamento muitas vezes quando você usa o comando Enviar . $

    
por 19.10.2012 / 09:22