Если вторым параметром встроенной команды AppleScript copy
является ссылка на приложение, AppleScript «услужливо» создает псевдоним для команды приложения duplicate
или set
, в зависимости от того, является ли первый параметр другой ссылкой или нет.Чтобы избежать путаницы, лучше всего явно использовать duplicate
или set
при работе со скриптовыми приложениями в AppleScript.
Что касается SB, вам нужно искать метод duplicate...
в заголовочном файле.Имейте в виду, что команда duplicate
SB является полукомплексной ( SB имеет довольно много недостатков ), поскольку она может иметь дело только с одним объектом одновременно.Большинство приложений позволяют вам управлять несколькими объектами в одной команде (предупреждают об ошибках в их поддержке сценариев), например, AppleScript позволит вам сказать:
tell application "iTunes"
duplicate (every track whose artist is "Foo") to (playlist "Bar")
end tell
, а SB - нет;вместо этого вы должны извлечь список отдельных ссылок и перебрать их, обрабатывая их по одной за раз.Делает ваш код довольно длинным и может быть очень неэффективным, если у вас есть большое количество объектов в другом месте.
Другой вариант - objc-appscript , который делает все эти вещи правильно и гораздо менее подвержен проблемам совместимости приложений в целом («совместимость по принципу quirk-for-quirk», как утверждает Мэтт Нойбург).Это).Кроме того, вы получаете ASTranslate, который преобразует команды AppleScript в эквивалентный синтаксис Python / Ruby / ObjC - очень удобно при поиске правильного выражения команды:
#import "ITGlue/ITGlue.h"
ITApplication *itunes = [ITApplication applicationWithName: @"iTunes"];
ITReference *ref = [[itunes tracks] byTest: [[ITIts artist] equals: @"Foo"]];
ITDuplicateCommand *cmd = [[ref duplicate] to: [[itunes playlists] byName: @"Bar"]];
id result = [cmd send];
Еще один вариант, если вы используете 10.6было бы использовать мост AppleScriptObjC, который позволяет объединять AS и ObjC в одной программе без всякой неприятной чепухи NSAppleScript.Это позволит вам использовать AppleScript для достижения наилучших результатов (общение с другими приложениями) и ObjC для всего остального.Официальная документация ограничена , но веб-поиск должен создавать различные сторонние ресурсы.MacScripter.net может быть хорошим местом для начала - в дополнение к форуму АСОК Крэйг Уильямс недавно опубликовал серию руководств.
(Кстати, Крейг также написал главу об АСОК для третьего издания Apress Learn AppleScript, который я написал в соавторстве и который содержит много информации о принципах и методах написания сценариев приложений, включая разъяснение set
/duplicate
/copy
.)