Skip to content

Instantly share code, notes, and snippets.

@moriyoshi
Created November 3, 2016 17:30
Show Gist options
  • Save moriyoshi/f2ad5a95b07be2fbdb2c38c5ee5b2fe9 to your computer and use it in GitHub Desktop.
Save moriyoshi/f2ad5a95b07be2fbdb2c38c5ee5b2fe9 to your computer and use it in GitHub Desktop.
Running After Effects Script through Apple Event Manager API
#include <stdio.h>
#include <stdlib.h>
#include <CoreServices/CoreServices.h>
static OSErr create_application_desc_from_bundle_id(AEAddressDesc *event, const char *bundle)
{
OSErr err;
return AECreateDesc(
typeApplicationBundleID,
bundle,
strlen(bundle),
(AEDesc *)event
);
}
int main()
{
OSErr err;
AEAddressDesc target;
int target_initiaized = 0;
AppleEvent event;
int event_initialized = 0;
err = create_application_desc_from_bundle_id(&target, "com.adobe.AfterEffects");
if (err) {
fprintf(stderr, "failed to create an application descriptor (%d)\n", err);
goto out;
}
err = AECreateAppleEvent(
kAEMiscStandards,
kAEDoScript,
&target,
kAutoGenerateReturnID,
kAnyTransactionID,
&event
);
if (err) {
fprintf(stderr, "failed to create an apple event (%d)\n", err);
goto out;
}
event_initialized = 1;
err = AEPutParamPtr(&event, keyDirectObject, typeText, "$.write(\"test\");", sizeof("$.write(\"test\");") - 1);
if (err) {
fprintf(stderr, "failed to append a parameter to the event (%d)\n", err);
goto out;
}
{
AppleEvent reply;
err = AESendMessage(&event, &reply, kAENeverInteract | kAEWaitReply | kAECanSwitchLayer | kAENormalPriority, kAEDefaultTimeout);
if (err) {
fprintf(stderr, "failed to send a message (%d)\n", err);
goto out;
}
AEDisposeDesc((AEDesc *)&reply);
}
fprintf(stderr, "message successfully sent.\n");
out:
if (target_initiaized) {
AEDisposeDesc((AEDesc *)&target);
}
if (event_initialized) {
AEDisposeDesc((AEDesc *)&event);
}
if (err) {
return 1;
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment