Как я могу передать перехваченный ключ приложению в autohotkey

Я постоянно активирую Firefox, затем нажимаю Ctrl+L, чтобы сфокусировать строку адреса и выполнить поиск или ввести URL-адрес.

В идеале я могу быть в любом приложении и нажать Ctrl+L, и Firefox будет активирован с сфокусированной адресной строкой и готов к вводу. Пошагово скрипт AutoHotkey.

Я пробовал это, и это, кажется, не работает. Из того, что я читал, тильда является «сквозной»:

^l::
IfWinExist ahk_class MozillaUIWindowClass
{
    WinActivate
    Send ~^l
}

person GollyJer    schedule 28.02.2010    source источник
comment
Просто нашел это примерно за 30 секунд до того, как я собирался опубликовать тот же основной вопрос. Спасибо!   -  person asfallows    schedule 11.01.2012


Ответы (2)


В итоге я сам получил ответ на этот вопрос на форуме AHK.< br> Требуется использование модификатора знака доллара ($).

$^l::
IfWinExist ahk_class MozillaUIWindowClass
{
    WinActivate
    Send ^l
}  


Из справки AutoHotkey:

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


А вот и полный скрипт, который я в итоге использовал. Если Firefox уже активен, Ctrl+L просто передается и ведет себя как обычно. Если вне Firefox, то при нажатии Ctrl+L активируется Firefox и создается новая вкладка; готов к поиску.

$^l::
IfWinExist ahk_class MozillaUIWindowClass
{
  IfWinActive ahk_class MozillaUIWindowClass
  {
    Send ^l
  }
  else
  {
    WinActivate
    Send ^t
  }
}
person GollyJer    schedule 01.03.2010

Я не думаю, что тильда применима в этом случае, но Send может отправлять ключи быстрее, чем активируется окно, поэтому что-то вроде этого может быть лучше:

SetKeyDelay, 10, 10 ; adds 10ms delay between and during keystrokes
IfWinExist, ahk_class MozillaUIWindowClass
{
   WinActivate,
   WinWaitActive, ; waits until window is active
   Send, ^l
}
return
person sinkfaze    schedule 01.03.2010