1

Тема: AHK: заставить работать несколько скриптов по одному шорткату

Имеем 2 скрипта:
1)

f11:: msgbox 1

2)

f11:: msgbox 2

Как заставить их работать?

2

Re: AHK: заставить работать несколько скриптов по одному шорткату

Валентина Гаврикова пишет:
~

В момент запуска обработчика этой горячей клавиши нельзя подавить системную обработку этого действия.
Некоторые замечания по горячим клавишам
Если тильда (~) хоть раз будет использована как префикс, все клавиши всегда будут посылаться в активное окно.


~f11:: msgbox 1
~f11:: msgbox 2

3

Re: AHK: заставить работать несколько скриптов по одному шорткату

А чтобы тильда действовала только для шорткатов скриптов, но не действовала как шорткат для активного окна можно сделать?

4

Re: AHK: заставить работать несколько скриптов по одному шорткату

Давайте, во-первых, избавимся от слова "шорткат".

Теперь объясните по-русски, у скриптов будут свои окна GUI?

5 (изменено: Malcev, 2013-12-16 09:59:27)

Re: AHK: заставить работать несколько скриптов по одному шорткату

Нет, не будут.
Скрипты - это просто иконки, которые меняют иконку в зависимости от нажатия горячей клавиши.
Вот один из них:

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 

6

Re: AHK: заставить работать несколько скриптов по одному шорткату

Можно из одного скрипта (который перехватит нажатие хоткея) посылать сообщение другому. Сообщение скрытому окну скрипта. А в скрипте ловите его через OnMessage.

7

Re: AHK: заставить работать несколько скриптов по одному шорткату

Malcev пишет:

Нет, не будут.
Скрипты - это просто иконки, которые меняют иконку в зависимости от нажатия горячей клавиши.

Попробуйте запустить эти скрипты одновременно:

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%

8 (изменено: Malcev, 2013-12-16 20:05:26)

Re: AHK: заставить работать несколько скриптов по одному шорткату

Можно из одного скрипта (который перехватит нажатие хоткея) посылать сообщение другому. Сообщение скрытому окну скрипта. А в скрипте ловите его через OnMessage.

Что-то не получается.
1-ый скрипт:

f11::
PostMessage, 0x5555,,,, 1.ahk

2-ой скрипт:

OnMessage(0x5555, "Msg")
Msg()
{
 msgbox 
}

Попробуйте запустить эти скрипты одновременно:

А почему так получается, что блокируется горячая кнопка в самой программе, а скрипт отлавливает?

9

Re: AHK: заставить работать несколько скриптов по одному шорткату

Заголовок окна разве такой? Ещё, возможно, нужно включить DetectHiddenWindows.

10

Re: AHK: заставить работать несколько скриптов по одному шорткату

А почему так получается, что блокируется горячая кнопка в самой программе, а скрипт отлавливает?

Потому что второй скрипт воспринимает эту горячую клавишу, но подавляет её системную обработку. Если запустить после этого ещё один скрипт с F11::  , наиболее "свежая" горячая клавиша подавляет более "старый" вариант той же клавиши.

11

Re: AHK: заставить работать несколько скриптов по одному шорткату

То есть, сначала это горячая клавиша идет в первый скрипт и из-за тильды она перехватывается вторым скриптом, который подавляет системную обработку. Так?
А почему горячая кнопка вначале перехватывается тем скриптом у которого тильда?

12

Re: AHK: заставить работать несколько скриптов по одному шорткату

Так программа устроена, точнее сказать не могу.

Как правило, горячие клавиши реализуются с использованием функции Windows API RegisterHotkey() везде, где это возможно. Однако при некоторых условиях отзывчивость (responsiveness) горячих клавиш может быть улучшена, если использовать вместо этого клавиатурный хук.

Видимо, существует несколько уровней "отлавливания" и "перехвата" нажатий клавиш, прежде чем они дойдут до конечного приложения.
На мой взгляд, когда запускается 1ый скрипт с горячей клавишей, он "проверяет", есть ли в системе горячие клавиши с тильдой и делает для них исключение (не подавляет системную обработку). Если потом запустить 2ой скрипт с такой же горячей клавишей, то он игнорирует существующие исключения (подавляет системную обработку).

13

Re: AHK: заставить работать несколько скриптов по одному шорткату

Большое всем спасибо!