PDA

Просмотр полной версии : Создание макросов


AlexLucas
09.11.2012, 14:24
Добрый день.
У меня приложение - смесь ворда и фотошопа (очень приблизительно), и есть задача создать макрос, по типу тех что есть в указанных приложениях.
Там нечто вроде записывающего устройства - запускаешь запись, записываются все действия, сохраняется макрос, потом при желании можно воспроизвести все эти действия.

Я не очень понимаю сам процесс - сначала запись : во всех функциях ставить if и проверять если записывается макрос? И если да, то добавлять их в список действий? Или может есть более простой способ? Хотя наверное как-то так надо делать, потому что не все действия нужно будет записывать в макрос (движение мыши, создание нового файла, сохранение итд).

В принципе, если записать последовательность действий, то сохранить их, и при желании - воспроизвести, ну по крайней мере я могу себе хоть отдалённо представить как это делать.

Если кто сталкивался с такой задачей, расскажите примерно как вы это делали.
Заранее спасибо.

wvxvw
09.11.2012, 16:13
Я могу доподлинно расказать как это делается в Эмаксе и с большой долей вероятности точно рассказать, как это делается в Фотошопе. Про Ворд я не знаю ничего.
Итак, в обоих случаях существует встроенный язык со своим рантаймом. В случае Эмакса - эЛисп, в случае Фотошопа - ЯваСкрипт (в ГИМПе, тоже так же, в Автокаде и т.д.). Действия, которые совершает пользователь выполняются средствами этого языка. Т.е. обращения к функциям редактора от пользователя идут не напрямую, а через интерпретатор. Таким образом, что когда вы записываете макрос, вы, на самом деле, просто записываете программу на интерпретируемом языке, которую вы потом выполняете точно так же, как выполнили бы ее, если бы она была введена пользователем интерактивно.
Записывание макроса: поскольку рантайм находится под вашим контролем, вам ничего не стоит записать его работу. Более того, вы это как правило уже делаете для поддержки отмены последнего действия, логирования действий пользователя на случай ошибки и отсылки сообщения об ошибке и т.п. Макрос в таком случае это скорее побочный продукт более универсальной системы.