вторник, 2 ноября 2010 г.

123

С момента своего появления в 1990 году AppleScript превратился в мощную систему, позволяющую управлять, как приложениями, установленными на вашем компьютере, так и самой операционной системой.

AppleScript позволяет осуществлять автоматизацию процессов на других компьютерах по локальной сети и сети интернет. Более того, с помощью AppleScript Studio, входящей в программу X-Code, вы можете создавать многофункциональные приложения с aqua-интерфейсом.

К AppleScript, как ни к одному из существующих языков программирования, подходит определение “человечный язык. Создатели AppleScript постарались облегчить процесс написания машинного кода, максимально приблизив его к простому общению пользователя с компьютером на английском языке.

Имея даже начальные знания английского языка, вы можете приступать к написанию сценариев, которые позволят автоматизировать большинство однотипных задач. В процессе написания программного кода вас не будет покидать ощущение того, что вы просто разговариваете с системой, сообщая ей команды, которые необходимо выполнить.

Но AppleScript - это все же язык программирования. И потому, перед тем как приступить к написанию скрипта, желательно познакомиться с некоторыми основными понятиями, терминами и синтаксисом AppleScript.

Словарь терминов
Класс — множество однотипных объектов.

Команда (операция) — конструкция языков программирования, способ записи некоторых функций.

Объект — некоторая сущность, обладающая состоянием и поведением. Объекты принадлежат одному или нескольким классам, которые в свою очередь определяют его поведение.

Скрипт (сценарий) — программа, автоматизирующая некоторую задачу.

Свойство — параметр объекта.

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

Объект может состоять из других объектов, быть включенным в другой объект или относиться к другому объекту. Поясним это на примере. Что вы делаете, когда точно знаете местоположение нужного вам файла? Вы начинаете последовательно перемещаться из папки в папку, пока не доберетесь до нужного файла. Так вот, когда вы щелкаете мышью на изображении жесткого диска на рабочем столе, то выбираете объект, который в свою очередь состоит из других объектов (их называют “подчиненными объектами”) таких, как папка Application, папка Library, папка System и папка User. Также правомочно будет сказать, что папка, например, Application относится к объекту “Macintosh HD”.

Знать эту вертикаль власти очень важно, поскольку команды передаются по цепочке. Неправильно построив последовательность исполнения команд, вы не сможете получить желаемый результат.

В AppleScript действует правило, которое наиболее просто запоминается афоризмом “‚ассал моего вассала — не мой вассал”. То есть, вы не можете отдать прямую команду низшему звену цепочки, минуя вышестоящие на иерархической лестнице объекты.

Группы однотипных объектов образуют классы. Один класс, на сленге программистов называемый “потомком”, может наследовать свойства другого класса (“предка”). В частности, папки и файлы наследуют свойства от общего предка - элемента.

Каждый объект обладает некоторым набором свойств, благодаря которому он отличается от других объектов. Папка, например, имеет следующие свойства: имя, дата создания, дата последнего изменения, тип метки, и т.д. —Часть свойств вы можете изменить, а некоторые доступны только для чтения.

Редактор скриптов
Для первого знакомства с AppleScript вполне подойдет редактор SriptEditor, который вы найдете в папке Application>AppleScript.

Окно Script Editor состоит из двух частей: в верхней записывается код сценария - A, а в нижней комментарии - B.

В зависимости от выбора одной из трех вкладок Description, Result и Event Log в окне комментариев отображается описание сценария - F, результат выполнения программы - J, лог событий скрипта - H.


На панели инструментов программы Script Editor расположены кнопки управления сценарием. Запись/остановка записи действия - C. Некоторые приложения поддерживают функцию записи действий. То-есть вы просто выполняете действия с помощью клавиатуры и мыши, а Script Editor самостоятельно записывает их в скрипт. При решении некоторых простых задач такой метод более чем прост и эффективен. Исполнение сценария - D. Компиляция исходного кода - E.

Хватит скучной теории! Переходим к более увлекательной практике. Все, что будет необходимо, изучим “по дороге”. Введите в окне записи кода сценария Script Editor следующий текст:

say "I love you"

и нажмите кнопку Run на панели инструментов для исполнения написанного программного кода.

Итак, девушка с олимпийским спокойствием призналась вам в любви... . Переведите дыхание и обратите внимание на то, что перед выполнением сценария Script Editor выделил команду “say” синим, а произносимую фразу черным цветом. Это сделано для того, чтобы код был более удобным для чтения и редактирования.

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

Но хочу вас сразу разочаровать, разговаривать с вами на русском языке девушка не будет ни при каких обстоятельствах. Она вежливо промолчит. Реализовать это в данном приложении, практически, невозможно.
Единственное, что вы можете сделать, так это изменить голос, которым будет произноситься написанная фраза.


Для этого дополните команду свойством “using” и укажите, каким голосом необходимо произнести данную фразу: “Agnes”, “Kathy”, “Princess”, “Viсki” и т.д.. Список голосов вы можете посмотреть в System Preferences.... > Speech > Text to Speech.

say "I love you" using "Vicki"

В основном AppleScript не чувствителен к регистру символов текста. Как бы вы не написали команду using, например, UsinG, USING или uSINg, она все равно будет однозначно интерпретирована.

Как видите, писать сценарии на AppleScript совсем не страшно, а код очень прост. Скрипт и на код-то не очень-то похож! Фактически, мы просто написали “Произнеси фразу “я тебя люблю”, используя голос девушки по имени “Vicki”.

AppleScript имеет в своем арсенале не так много команд, как, наверное, вам представляется. Но не спешите расстраиваться, ведь его сила заключается совсем в другом. AppleScript позволяет вам взаимодействовать с другими приложениями, поддерживающими язык сценариев (так называемые скриптуемые программы (scriptable)). Поэтому в вашу обойму, кроме ограниченного набора команд AppleScript, попадает широкий спектр команд, предоставляемых различными приложениями.

Команды AppleScript могут состоять из одной или более инструкций. ‚о втором случае команды заключаются в группы. ѓруппа представляет собой набор инструкций, в начале которых идет команда, открывающая группу, а в конце слово end и первая инструкция блока.

Чтобы воспользоваться командами скриптуемых приложений, необходимо к ней обратиться (“открыть диалог”). Чтобы у вас появилась возможность отдать команду другому приложению, необходимо завершить (“закрыть”) текущий диалог и открыть новый. Обращение к приложению представляет из себя группу и начинается с команды tell. Рассмотрим пример обращения к самому популярному приложению у мак-пользователей Finder. Напишем скрипт, который удаляет из корзины помещенные в нее файлы:

tell application "Finder"
empty the trash
end tell

Начало и конец группы выделены жирным шрифтом. ‚се команды, расположенные внутри блока “tell...end tell” будут отнесены к приложению, указанному в первой инструкции группы.

Вместе с тем, если внутри блока обращения поместить любую команду из ограниченного набора AppleScript, она успешно выполнится. ‚ качестве иллюстрации вышесказанного дополним предыдущий пример еще одной инструкцией:

tell application "Finder"
empty the trash
beep 3
end tell

Инструкция beep воспроизводит системный звук. За ней идет необязательный параметр, сообщающий системе, сколько раз должен воспроизводиться системный звук.

Скрипт-процессор (речь о котором пойдет далее), несмотря на то, что блок обращения адресован приложению Finder, распознает “стандартную” команду AppleScript и корректно обрабатывает ее. Обратите внимание, что название программы в блоке обращения должно указываться в прямых кавычках. Если вы забудете их ввести, Script Editor примет указание слова Finder за обращение к переменной и, как следствие, выдаст ошибку “The variable Finder is not defined.”, что означает “Переменная Finder не определена”. Будьте внимательны, кавычки елочки в AppleScript также имеют большое значение и отличаются от прямых кавычек.



Несколько слов о словарях
Словари! Как же без словаря?! Все, как в жизни: знаешь, что тебе нужно, но не знаешь, как написать — посмотри в словаре.

Просмотреть словари приложений, поддерживающих AppleScript, можно непосредственно из редактора скриптов (Script Editor).

Для этого выберите команду Open Dictionary... из меню File или перенесите иконку нужной программы на пиктограмму редактора. ‚ первом варианте перед вами появится окно, в котором вам предстоит выбрать программу, набор доступных команд, которые вы хотите изучить.


Выберите Finder и нажмите Open. В верхней части появившегося окна находятся три колонки. В первой - A, вы можете выбрать группу, к которой принадлежит нужная вам команда или класс. Во второй - B, перечень команд и классов. В третьей - C, вы можете увидеть список свойств (Properties) и элементов (Elements), соответствующих выбору во второй колонке.

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

Обратите внимание, что в указании типа некоторых свойств присутствует сокращение r/o. Оно расшифровывается как read only и означает, что это свойство доступно только для чтения и изменить его значение вы не можете.

При описании команд сначала указывается ее назначение, а затем ее синтаксис и параметры. ‚ы, наверно, заметили, что некоторые параметры указаны в квадратных скобках С так в словаре обозначаются необязательные параметры. При написании кода вы можете их не использовать. Однако, если в их использовании все-таки есть необходимость, то указывать их, разумеется, следует без скобок.

В завершении описания команды после горизонтальной стрелки указывается результат ее исполнения.

В правом верхнем углу окна любого словаря отображается панель поиска, с помощью которой вы можете быстро найти описание нужного объекта, команды, класса и т.д.

Запись сценариев
Поговорим теперь о заманчивой опции записи, которой я слегка коснулся в начале статьи.

Осуществлять запись сценариев вы можете с помощью кнопки Record, расположенной на панели инструментов редактора Script Editor.

Если запущенное приложение поддерживает запись действий, то вы можете нажать на эту кнопку и все ваши действия будут записаны в виде команд AppleScript.

Но не все так легко и просто. Вы можете записать далеко не все действия. Действия по внесению изменений в документ или добавлению/удалению файлов интерпретируются в инструкции, а, например, изменение размеров или перемещение окна могут не записываться.

Однако, в большинстве случаев, действия, которые нельзя записать, можно выполнить с помощью сценария.
Создание сложных скриптов с помощью функции записи затруднительно, а во многих случаях и просто невозможно. Но создавать с ее помощью заготовки будущих сценариев очень удобно.

Сохранение скриптов
Пришла пора сказать несколько слов о сохранении скриптов. Но перед этим традиционно немного теории.

Существует три основных вида программ: скрипты, байт-код и скомпилированный код. AppleScript позволяет хранить скрипты в скомпилированных (исполняемых) версиях и в исходной форме. Если вы уже знакомы с этими терминами, то можете пропустить три следующих абзаца.

Программирование скриптов является по сути записью последовательности команд. Обработкой скриптов занимается скрипт-процессор. В случае с AppleScript скрипт-процессор С это механизм AppleScript, являющийся частью операционной системы. Скрипт-процессор конвертирует команды скрипта в действия, исполняемые компьютером. Каждый раз при исполнении скрипта происходит его обработка скрипт-процессором.

Традиционные языки программирования, такие как C, С++ , Pascal и многие другие используют компиляцию. Конвертирование команд программиста в действия, исполняемые компьютером, осуществляется не при каждом запуске программы, а один раз при завершении ее разработки, то есть на выходе процесса компиляции получаются инструкции для компьютера. Скомпилированный код специфичен для каждой отдельно взятой операционной системы. Например, код, написанный на С, может быть скомпилирован для исполнения в Mac OS, Windows или Unix, но вы не можете копировать исполняемый файл на разные операционные системы.

Некоторые языки, например Java, используют промежуточный механизм — осуществляется компиляция в байт-код. Процедура компиляция исходного кода в байт-код выполняется один раз. Байт-код конвертируется в команды компьютера в любой операционной системе.


Итак, выберите из меню команд File > Save As.... На экране появится диалоговое окно. Укажите название сценария и его место хранения. ‚ выпадающем меню File Format доступно несколько вариантов. Подумайте, в каком качестве вы хотите сохранить ваш скрипт.

Вы можете сохранить его в виде файла с расширением .scpt (вариант script). В этом случае открыть его вы сможете только в редакторе сценариев AppleScript.

Другой вариант — вы можете сохранить его в качестве скомпилированного приложения, и для того, чтобы запустить его, в дальнейшем потребуется только дважды кликнуть на нем мышкой. Для этого выберите из выпадающего меню пункт application.

Выбрав в меню File Format пункт text, вы сохраните код в виде простого текста (файл с расширением .applescript) и затем сможете открыть его в любом текстовом редакторе.

Вдобавок, вы можете отрегулировать еще несколько параметров. При выборе формата script доступной является только одна опция, а именно: Run Only. Если вы сохраняете скрипт в формате приложения, то вам доступно уже три опции: Startup Screen, Stay Open и уже названная Run Only.

Если вы установите флажок напротив фразы Startup Screen, то при запуске сценария на мониторе компьютера появится окно, в котором будет отображаться тот текст, который вы ввели в нижней части окна Script Editor (вкладка Description). Однако, хочу предупредить вас, что столкнулся с проблемой, решить которую мне пока не удалось С русский текст, введенный на вкладке Description отображается некорректно. Как бы то ни было, пользователю будут предложены в виде двух кнопок следующие варианты: Run — запуск сценария и Quite — выход из программы.

Если вы хотите, чтобы после выполнения созданное вами приложение не закрылось, а оставалось активным и отображалось в Dock, то установите флажок напротив предложения Stay Open.

При включении опции Run Only вы создадите файл, отредактировать который в дальнейшем ни вы, ни кто либо другой уже не смогут. Сценарий можно будет только запустить. Будьте осторожны, если вы не сохраните для себя “редактируемую” версию, то пострадают не только пираты авторских прав, но и вы.

Эта статья носила вводный характер. Однако, материал этого “урока” чрезвычайно важен для последующего изучения AppleScript.

В дальнейшем наши уроки будут более увлекательными и построены на конкретных примерах.