2010-03-13 68 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