2011-02-14 25 views
0

我試圖在使用Scripting Bridge的Objective-C中表示切片(「通過AppleScript」)。 示例代碼正在iWorks Pages中進行選擇。 的AppleScript的代碼看起來像這樣用ScriptingBridge表示一個範圍(或切片)

tell application "Pages" 
    tell document 1 
     select (characters 8 thru 14) 
    end tell 
end tell 

和Objective-C的代碼是在這裏。我需要的是在Objective-C中表達(字符8到14)的方法。

PagesApplication *app; 
app = [SBApplication applicationWithBundleIdentifier:@"com.apple.iWork.Pages"]; 
SBElementArray *docs = [app documents]; 
PagesDocument *doc = [docs objectAtIndex:0]; 

// now we need to express 
// "select (characters 8 thru 14)" in obj-c 

// ?? 

感謝您的幫助。 Björn

回答

0

我不得不使用低級AppleEvents。從命令行監控Apple事件。 這是一個代碼:

AppleEvent eventToSend, eventToReceive; 
OSStatus err; 
AEBuildError buildError; 

char *bundleID = "com.apple.iWork.Pages"; 

eventToSend.descriptorType = 0; 
eventToSend.dataHandle  = NULL; 

eventToReceive.descriptorType = 0; 
eventToReceive.dataHandle  = NULL;   

err = AEBuildAppleEvent(kAEMiscStandards, 
         kAESelect, 
         typeApplicationBundleID, 
         bundleID, 
         strlen(bundleID), 
         kAutoGenerateReturnID, 
         kAnyTransactionID, 
         &eventToSend, 
         &buildError, 
         "'----':'obj '{form:rang, want:type('cha '), seld:'rang' {" 
         "star:'obj '{form:indx, want:type('cha '), seld:long(@), from:ccnt()}," 
         "stop:'obj '{form:indx, want:type('cha '), seld:long(@), from:ccnt()}}," 
         "from:'obj '{form:indx, want:type(docu), seld:long(1), from:()}}", 8, 14); 

if (err != noErr) { 
    NSLog(@"failed to build Apple Event. Error code %d at pos %d\n", buildError.fError, buildError.fErrorPos); 
    exit(1); 
} 

err = AESendMessage(&eventToSend, &eventToReceive, kAEWaitReply, kAEDefaultTimeout); 

if (err != noErr) { 
    NSLog(@"failed to send Apple Event\n");  
    exit(1); 
} 

/* deallocate memory */ 
AEDisposeDesc(&eventToReceive); 
AEDisposeDesc(&eventToSend);