Вопрос

Следующий код AppleScript работает нормально:

tell application "Adium" to tell first account to make new chat with contacts {first contact} with new chat window

Но как я могу сделать то же самое, используя ScriptingBridge от Cocoa?

Это было полезно?

Решение

Как правило, вы должны быть в состоянии сделать это, следуя инструкциям Apple. Руководство по программированию Scripting Bridge для Cocoa.Для начала я создал заголовочный файл для Adium, запустив sdef /Applications/Adium.app | sdp -fh --basename Adium в Терминале (создает Adium.h в текущем каталоге).Созданный заголовочный файл дает подсказки о выполнении вызовов AppleScript через Scripting Bridge.

Проблема, с которой я столкнулся, заключается в том, что я не вижу способа на основе сгенерированного файла заголовка сделать make new chat with contacts {...} with new chat window (Я могу создать новый чат и, возможно, даже подключить его к новому окну, но не нашел способа заставить этот чат принять контакт).

Следующим лучшим вариантом может быть использование НСАплескрипт чтобы выполнить действительный код AppleScript:

NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:@"tell application \"Adium\" to tell first account to make new chat with contacts {first contact} with new chat window"];
NSDictionary *errorDictionary;
NSAppleEventDescriptor *eventDescriptor = [appleScript executeAndReturnError:&errorDictionary];

Другие советы

Если не использовать необработанные коды событий Apple, вы не сможете этого сделать.Должен работать с objc-appscript хотя.Запуск команды AppleScript с помощью инструмента ASTranslate приложения script дает следующее:

#import "ADGlue/ADGlue.h"
ADApplication *adium = [ADApplication applicationWithName: @"Adium"];
ADReference *ref = [[adium accounts] at: 1];
ADMakeCommand *cmd = [[[[ref make] newChatWindow: ASTrue] withContacts: [NSArray arrayWithObject: [[[[adium accounts] at: 1] contacts] at: 1]]] new_: [ADConstant chat]];
id result = [cmd send];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top