Pergunta

O código a seguir AppleScript funciona bem:

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

Mas como posso fazer o mesmo usando de cacau ScriptingBridge?

Foi útil?

Solução

Geralmente, você deve ser capaz de fazê-lo seguindo da Apple Scripting Ponte Guia de Programação de Cacau . Para começar, eu criei um arquivo de cabeçalho para Adium executando sdef /Applications/Adium.app | sdp -fh --basename Adium no Terminal (cria Adium.h no diretório atual). O arquivo de cabeçalho produzido dá pistas sobre fazer as chamadas AppleScript através da ponte de Scripting.

O problema que eu tive é que eu não posso ver uma maneira, com base no arquivo de cabeçalho gerado, fazer make new chat with contacts {...} with new chat window (I pode fazer um novo bate-papo e talvez até mesmo ligá-lo em uma nova janela, mas eu não poderia encontrar um maneira de fazer esse bate-papo tomar o contato).

A próxima melhor coisa seria usar NSAppleScript para executar seu código AppleScript válido:

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];

Outras dicas

Curto de usar códigos de evento da Apple cru, você não pode. Deve trabalhar com objc-appscript embora. Executando o seu comando AppleScript através da ferramenta ASTranslate de appscript produz o seguinte:

#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];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top