次のAppleScriptコードは正常に機能します。
tell application "Adium" to tell first account to make new chat with contacts {first contact} with new chat window
しかし、CocoaのScriptingBridgeを使用して同じことを行うにはどうすればよいですか?
次のAppleScriptコードは正常に機能します。
tell application "Adium" to tell first account to make new chat with contacts {first contact} with new chat window
しかし、CocoaのScriptingBridgeを使用して同じことを行うにはどうすればよいですか?
生の 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];
通常、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
(新しいチャットを作成し、それを新しいウィンドウにフックすることさえできますが、それを行う方法が見つかりませんでした)。チャットで連絡を取る)。
次善の策は、有効な AppleScript コードを実行するためにNSAppleScriptを使用することです。
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];