2010-03-13 103 views

回答

0

一般来说,你应该能够做到这一点下面的苹果Scripting Bridge Programming Guide for Cocoa。首先,我通过在终端中运行sdef /Applications/Adium.app | sdp -fh --basename Adium(在当前目录中创建Adium.h)创建了Adium的头文件。生成的头文件提供了关于通过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]; 
+0

“我无法找到一种方法让聊天进行联系” - 你不能。发送'make'('core' /'crel')事件在SB中部分被禁止。你可以提供一个'带有数据'参数或'带有属性'参数(但不能同时),就是这样。 SB为'new'和'at'参数做了它自己的事情,并且不允许你通过任何其他参数。大多数应用程序都依赖'with property'来提供值,但没有法律要求这样做,而Adium则不适用。正如我所说,要做到这一点,你必须使用原始的AE代码。或者使用正确说出Apple事件的AppleScript/appscript。 – has 2010-03-14 10:45:35

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

的objc-appscript工作正常,到目前为止,但它并不能帮助我创建一个新的聊天。我只是得到一个空的结果而没有任何反应。 – 2010-03-16 19:23:11