Создайте новый чат в Adium с помощью Cocoa ScriptingBridge

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

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

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

2 ответа

Решение

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

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

Следующим лучшим вариантом может быть использование NSAppleScript для выполнения допустимого кода 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 в приложении дает следующее:

#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];
Другие вопросы по тегам