Тема: AHK: заставить работать несколько скриптов по одному шорткату
Имеем 2 скрипта:
1)
f11:: msgbox 12)
f11:: msgbox 2Как заставить их работать?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Имеем 2 скрипта:
1)
f11:: msgbox 12)
f11:: msgbox 2Как заставить их работать?
~
В момент запуска обработчика этой горячей клавиши нельзя подавить системную обработку этого действия.
Некоторые замечания по горячим клавишам
Если тильда (~) хоть раз будет использована как префикс, все клавиши всегда будут посылаться в активное окно.
~f11:: msgbox 1~f11:: msgbox 2А чтобы тильда действовала только для шорткатов скриптов, но не действовала как шорткат для активного окна можно сделать?
Давайте, во-первых, избавимся от слова "шорткат".
Теперь объясните по-русски, у скриптов будут свои окна GUI?
Нет, не будут.
Скрипты - это просто иконки, которые меняют иконку в зависимости от нажатия горячей клавиши.
Вот один из них:
Menu, Tray, Icon, D:\Abola\Icons\astrolog_in.ico
A = 0
#IfWinActive ahk_class Premiere Pro
~!vk41::
if (A = 0)
{
A = 1
Menu, Tray, Icon, D:\Abola\Icons\astrolog_out.ico
}
Else
{
A = 0
Menu, Tray, Icon, D:\Abola\Icons\astrolog_in.ico
}
return
#IfWinActive Можно из одного скрипта (который перехватит нажатие хоткея) посылать сообщение другому. Сообщение скрытому окну скрипта. А в скрипте ловите его через OnMessage.
Нет, не будут.
Скрипты - это просто иконки, которые меняют иконку в зависимости от нажатия горячей клавиши.
Попробуйте запустить эти скрипты одновременно:
a := 1
~F11::
a++
Menu, Tray, Icon, %A_WinDir%\system32\shell32.dll, %a%
a := 1
F11::
a++
Menu, Tray, Icon, %A_WinDir%\system32\shell32.dll, %a%Можно из одного скрипта (который перехватит нажатие хоткея) посылать сообщение другому. Сообщение скрытому окну скрипта. А в скрипте ловите его через OnMessage.
Что-то не получается.
1-ый скрипт:
f11::
PostMessage, 0x5555,,,, 1.ahk2-ой скрипт:
OnMessage(0x5555, "Msg")
Msg()
{
msgbox
}Попробуйте запустить эти скрипты одновременно:
А почему так получается, что блокируется горячая кнопка в самой программе, а скрипт отлавливает?
Заголовок окна разве такой? Ещё, возможно, нужно включить DetectHiddenWindows.
А почему так получается, что блокируется горячая кнопка в самой программе, а скрипт отлавливает?
Потому что второй скрипт воспринимает эту горячую клавишу, но подавляет её системную обработку. Если запустить после этого ещё один скрипт с F11:: , наиболее "свежая" горячая клавиша подавляет более "старый" вариант той же клавиши.
То есть, сначала это горячая клавиша идет в первый скрипт и из-за тильды она перехватывается вторым скриптом, который подавляет системную обработку. Так?
А почему горячая кнопка вначале перехватывается тем скриптом у которого тильда?
Так программа устроена, точнее сказать не могу. ![]()
Как правило, горячие клавиши реализуются с использованием функции Windows API RegisterHotkey() везде, где это возможно. Однако при некоторых условиях отзывчивость (responsiveness) горячих клавиш может быть улучшена, если использовать вместо этого клавиатурный хук.
Видимо, существует несколько уровней "отлавливания" и "перехвата" нажатий клавиш, прежде чем они дойдут до конечного приложения.
На мой взгляд, когда запускается 1ый скрипт с горячей клавишей, он "проверяет", есть ли в системе горячие клавиши с тильдой и делает для них исключение (не подавляет системную обработку). Если потом запустить 2ой скрипт с такой же горячей клавишей, то он игнорирует существующие исключения (подавляет системную обработку).
Большое всем спасибо!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться