Как я могу передать перехваченный ключ в приложение в AutoHotkey - PullRequest
11 голосов
/ 28 февраля 2010

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

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

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

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

Ответы [ 2 ]

19 голосов
/ 01 марта 2010

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

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


Из справки AutoHotkey:

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


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

$^l::
IfWinExist ahk_class MozillaUIWindowClass
{
  IfWinActive ahk_class MozillaUIWindowClass
  {
    Send ^l
  }
  else
  {
    WinActivate
    Send ^t
  }
}
0 голосов
/ 01 марта 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
...