Что нового

[Интеракция] Обращение к Actions в Иллюстраторе по горячей клавише и по названию

Seven

Новичок
Сообщения
3
Репутация
0
Ситуация: Adobe Illustrator CC 2014 (v. 18), нужно вызвать из палитры Actions два экшна:

1. Экшн, которому назначена комбинация клавиш Ctrl+Shift+F2,
2. Экшн, от которого есть только название Black Background.

Код:
; Запуск Actions в Иллюстраторе

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

$hMain_GUI = GUICreate('AI Action Starter', 190, 200, 100, 100, BitOR($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX), $WS_EX_TOPMOST)
GUISetState(@SW_SHOW, $hMain_GUI)

Local $idButton1= GUICtrlCreateButton("Экшн с ГорКлавишей", 20, 30, 150, 25)
Local $idButton2= GUICtrlCreateButton("Экшн без ГорКлавиши", 20, 80, 150, 25)
Local $idButton3= GUICtrlCreateButton("Меню", 20, 130, 150, 25)

Func _ActHotKey()

	;ожидание, пока окно станет активным
	Local $handle = WinWaitActive("[CLASS:illustrator]", "");

	;мигание окна
	WinFlash($handle);

	sleep(200)
	Send("{LCTRL}{LSHIFT}{F2}")

EndFunc

Func _ActByName()
	;
EndFunc

Func _Menu3()

	; Select All

	;ожидание пока окно станет активным
	Local $handle = WinWaitActive("[CLASS:illustrator]", "");

	sleep(200)
	Send('!s')
	sleep(200)
	Send('a')
	sleep(200)
	Send('{ENTER}')

EndFunc

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg

        Case $GUI_EVENT_CLOSE
            Exit

		Case $idButton1
			; Послать Ctrl+Shift+F2 в Иллюстратор
			_ActHotKey()

		Case $idButton2
			; Запустить Action по имени
			_ActByName()

		Case $idButton3
			; Меню
			_Menu3()

    EndSwitch
WEnd

Кнопкой 1 в скрипте пытаюсь отправить комбинацию. Видно, что окно Иллюстратора стало активным, но экшн не запустился. Для сравнения, по кнопке 3 меню Иллюстратора через Alt прекрасно вызывается. В данном случае знать подробности об окне Actions не нужно, имхо. Значит, я неправильно понял мануал, или пользуюсь не той командой?

По второй части перепробовал разное, и не вижу перспектив. О палитре Actions известно: класс окна OWL.Dock, класс контрола DroverLord - Window Class, и еще известно Instance 2, но это значение не уникальное. К тому же, в Иллюстраторе есть и другие палитры с DroverLord - Window Class. В общем, уникальным является только название экшна - Black Background, как бы именно по нему вызвать экшн?

Пожалуйста, посоветуйте, в какую сторону копать. И да, это моя первая попытка применения AutoIT. Может быть, без скриптинга в Иллюстраторе вообще не решить п. 2?

Спасибо.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Seven [?]
Ситуация: Adobe Illustrator CC 2014 (v. 18), нужно вызвать из палитры Actions два экшна
Action, в продуктах Adobe пишутся на VBScript или JScript. Вы можете взять два ваших скрипта (action) и переписать их на Autoit, используя COM (Component Object Model).
 
Автор
S

Seven

Новичок
Сообщения
3
Репутация
0
Garrett, спасибо. То, что в Иллюстраторе такие вещи пишутся на JavaScript, это факт, и с этими документами я знаком. Есть определенные сложности вызова из Actions собственно скриптов JS (которые вызываются из меню Scripts, например) и наоборот, хотя к Autoit это не имеет отношения. Ценность Actions - именно в простоте их создания, но их вызов в Иллюстраторе выполнен неудачно, на мой взгляд.

Поэтому наиболее эффективный путь, если это возможно - именно организация запуска Actions средствами Autoit. Переписать Actions, используя COM, видимо, можно, но это не совсем то, что бы хотелось - это вариант Б.

И еще, если не сложно - по комбинации горячих клавиш что у меня в коде неправильно? Вроде бы все как в примерах, а Иллюстратор в ответ на Ctrl+Shift+F2 ничего не делает. Если окно Иллюстратора активно, то назначенный экшн должен запускаться. Видимо, это довольно тупой вопрос, но я не могу найти решение:

Код:
Send("{LCTRL}{LSHIFT}{F2}")


Спасибо.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Seven
Вы наверно не так меня поняли.
Дело в том, что когда вы активизируете запись action, то программа сама пишет скрипт ваших действий в JS или VBS (смотря что выставлено в настройках).
Вам остаётся только переписать скрипт на Autoit.

Иллюстратор в ответ на Ctrl+Shift+F2 ничего не делает
Проверьте раскладку, или попробуйте:
Код:
Send("^+{F2}")
 
Автор
S

Seven

Новичок
Сообщения
3
Репутация
0
Garrett, большое спасибо, клавиши заработали, запуск Actions по хоткеям побежден. Что касается записи действий в JS и переписывания на Autoit - спасибо, еще буду пробовать.


Добавлено:
Сообщение автоматически объединено:

Garrett, видимо, я не там копаю, и вынужден снова обратиться за подсказкой.

программа сама пишет скрипт ваших действий в JS или VBS (смотря что выставлено в настройках).

Если имеется в виду, что пишет Иллюстратор - да, есть файл с actions, типа .aia, но это точно не JS. Скорее, это набор параметров. Где можно настроить сохранение actions в JS/VBS, в меню Иллюстратора совершенно не видно.

Если мне следовало воспользоваться каким-то инструментом из Autoit - вроде бы, я все доступное перепробовал, подходящих результатов не получил. Пробовал создавать action с запущенным макрогенератором, это тоже не то, что нужно.

В общем, не пойму, где мне взять или как получить тот JS или VBS из action, который нужно будет перевести на Autoit. Если есть возможность, просветите, пожалуйста.

Спасибо.
 

Cornet

Знающий
Сообщения
41
Репутация
6
запуск Actions на autoit:
Код:
$IllApp = ObjCreate("Illustrator.Application")
$IllApp.doScript('ActionName', 'SetName')

Ну и соответственно подставьте свои названия сета и экшена.

В Adobe Illustrator экшены конвертировать в JS помоему не возможно, если вдруг нужно будет для Adobe Photosop — поищите скрипт ActionToJavascript.jsx

P.S. Экшен возможно и удобен, но не так гибок, как управление Иллюстратором используя COM. Хотя без экшенов иногда и не обойтись, например экспорт в формат emf почем-то через COM в иллюстраторе не реализовали, приходится делать через экшен чтобы не вызывать лишних окон.
 
Верх