1

Тема: AHK: игнорирование условия IfWinActive, срабатывание везде

У меня есть один общий скрипт, в котором сведена все необходимая мне функциональность.
Часть из них нужна для работы в одной программе, часть — в другой, третья — вообще везде.
Но я заметил, что несмотря на выставленное условие, код выполняется везде:

#NoEnv
#Persistent
#SingleInstance force
SetKeyDelay, -1

;other stuff

#vk5A::
IfWinActive, ahk_class illustrator
SendMessage, 0x50, , 0x4090409, , ahk_class illustrator
send {alt down}{f}{alt up}
send {r}{v}{3}
return

Этот фрагмент кода разворачивает нажатие Win+A в последовательность нажатий, чтобы добраться до нужного пункта меню в Adobe Illustrator, на который нельзя повесить горячую клавишу штатными средствами. То есть в данном виде он работает, но зачем-то срабатывает так же в других программах.
Что я делаю не так?

2

Re: AHK: игнорирование условия IfWinActive, срабатывание везде

http://www.script-coding.com/AutoHotkey … ctive.html
Для выбора меню лучше использовать, WinMenuSelectItem.

3

Re: AHK: игнорирование условия IfWinActive, срабатывание везде

Использование закрывающей директивы не помогло

#vk5A::
#IfWinActive, ahk_class illustrator
SendMessage, 0x50, , 0x4090409, , ahk_class illustrator
send {alt down}{f}{alt up}
send {r}{v}{3}
return
#IfWinActive

4

Re: AHK: игнорирование условия IfWinActive, срабатывание везде

Malcev пишет:

Для выбора меню лучше использовать WinMenuSelectItem.

Верю, но не в данном случае; список подпунктов данного меню генеририруется как-то хитро, после запуска программы, и боюсь, недоступен для данного метода. А вот по клавишам — работает (и имена подпунктов настроены именно под клавиатуру).
Суть вопроса в другом — почему код срабатывает везде, а не только в целевом окне?

5

Re: AHK: игнорирование условия IfWinActive, срабатывание везде

Хотки надо вставлять внутрь директивы:

#IfWinActive, ahk_class illustrator
#vk5A::
SendMessage, 0x50, , 0x4090409, , ahk_class illustrator
send {alt down}{f}{alt up}
send {r}{v}{3}
return
#IfWinActive

6

Re: AHK: игнорирование условия IfWinActive, срабатывание везде

Вопрос закрыт, кажется, я сам дурак (полагаю, это почти всегда ответ):

#IfWinActive, ahk_class illustrator
#vk5A:: ;z zoom to selection
SendMessage, 0x50, , 0x4090409, , ahk_class illustrator
send {alt down}{f}{alt up}
send {r}{v}{3}
return
#IfWinActive

7

Re: AHK: игнорирование условия IfWinActive, срабатывание везде

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

Раз работает с шорткатами, значит должно работать и с winmenuselectitem даже если название меняется. (в названии меню будет стоять &перед горячей клавишей, следовательно можно парсить.)
Вот код от Teadrinker для определения всех подпунктов меню:
http://forum.script-coding.com/viewtopi … 80&p=2