2

Я использовал WinClose Script в AutoHotKey, чтобы закрыть окна с помощью Ctrl+w (^ w). Поскольку Ctrl+w иногда уже является ярлыком для закрытия окна (или вкладки в Firefox), я снова отправляю Ctrl+w, который, как мне кажется, заканчивается бесконечным циклом. Как я могу решить это?

Это сообщение об ошибке:

И это мой сценарий:

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

2 ответа2

6

Я бы попробовал использовать контекстно-зависимые горячие клавиши вместо проверки активного окна при нажатии клавиш. Ваши другие горячие клавиши по-прежнему работают так же, но поскольку ваши браузеры не указаны, они сохранят свою нормальную функциональность. Я создал желаемую функциональность, используя код ниже:

#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

Если между программами есть общие горячие клавиши, вы также можете создавать группы:

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

#IfWinActive ahk_group FileExplorer
    ^w::WinMinimize, A
#IfWinActive
0

Как я вижу, у вас нет возврата в операторе if, так что имеется ввиду циклическое повторение до тех пор, пока ваш скрипт не рухнет, также вы должны включить else return, ... попробуйте этот подход.

Отредактировано:

    $^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

Используйте $, чтобы предотвратить многократный запуск при использовании команды « Отправить» . $

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