Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I execute a simple Applescript from a C++ program?

I would like to execute the Applescript command tell application "Finder" to open POSIX file */path/to/somefilename* from a C++ program. It looks like I might want to use OSACompileExecute, but I haven't been able to find an example of how to use it. I keep finding examples of how to use the OSACompile Terminal command. Can someone provide an example or a link to an example?

like image 255
SSteve Avatar asked Feb 01 '12 18:02

SSteve


People also ask

How do I run a script in OSX?

In the Script Editor app on your Mac, click the Run button in the toolbar, or press Command-R, to execute the commands in your script.

How do I open AppleScript Editor?

Go to the Windowmenu and choose Script Window. The Script Editor opens with a window ready for you to start writing a script.


2 Answers

Ok, the trick was to not bother trying to compile and execute the Applescript but to simply use the osascript system command:

    sprintf(cmd, "osascript -e 'tell app \"Finder\" to open POSIX file \"%s/%s\"'", getcwd(path, MAXPATHLEN), file);
    system(cmd);

path and file are both char[] variables.

I got the clue from this excerpt from Applescript: The Definitive Guide.

like image 199
SSteve Avatar answered Oct 31 '22 17:10

SSteve


Here's an example C function for reading a Get Info comment from the finder using AppleScript.

You could modify it for what you want.

NSString * readFinderCommentsForFile(NSString * theFile){
/* Need to use AppleScript to read or write Finder Get Info Comments */

/* Convert POSIX file path to hfs path */
NSURL * urlWithPOSIXPath = [NSURL fileURLWithPath:theFile];
NSString * hfsStylePathString = 
(__bridge_transfer NSString    *)CFURLCopyFileSystemPath((__bridge CFURLRef)  urlWithPOSIXPath, kCFURLHFSPathStyle);

/* Build an AppleScript string */
NSString *appleScriptString = @"tell application \"Finder\"\r get comment of file ";
appleScriptString = [appleScriptString stringByAppendingString:@"\""];
appleScriptString = [appleScriptString stringByAppendingString:hfsStylePathString];
appleScriptString = [appleScriptString stringByAppendingString:@"\""];
appleScriptString = [appleScriptString stringByAppendingString:@"\r end tell\r"];


NSString *finderComment;

NSAppleScript *theScript = [[NSAppleScript alloc] initWithSource:appleScriptString];

NSDictionary *theError = nil;
finderComment = [[theScript executeAndReturnError: &theError] stringValue];
NSLog(@"Finder comment is %@.\n", finderComment);


return finderComment;
like image 33
Jim Merkel Avatar answered Oct 31 '22 15:10

Jim Merkel