使用Cocoa ScriptingBridge在Adium中进行新聊天

时间:2010-03-13 14:25:16

标签: objective-c cocoa scripting applescript adium

以下AppleScript代码可以正常运行:

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

但是如何使用Cocoa的ScriptingBridge做同样的事情?

2 个答案:

答案 0 :(得分:0)

如果不使用原始Apple事件代码,则不能。应该使用objc-appscript。通过appscript的ASTranslate工具运行AppleScript命令会产生以下结果:

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

答案 1 :(得分:0)

一般来说,你应该能够按照Apple的Scripting Bridge Programming Guide for Cocoa进行操作。首先,我通过在终端中运行sdef /Applications/Adium.app | sdp -fh --basename Adium来创建Adium的头文件(在当前目录中创建Adium.h)。生成的头文件提供了有关通过Scripting Bridge进行AppleScript调用的线索。

我遇到的问题是,根据生成的头文件,我无法看到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];