Commented out the aliasdata stuff that doesn't work
[ITFoundation.git] / ITAppleEventTools.m
index 0b86b64..9eaacb1 100755 (executable)
@@ -19,6 +19,9 @@ NSAppleEventDescriptor *ITSendAEWithString(NSString *sendString, FourCharCode ev
     
     AppleEvent sendEvent, replyEvent;
     NSAppleEventDescriptor *send, *recv;
+    AEDesc resultDesc;
+    DescType resultType;
+    Size resultSize;
     
     AEBuildError buildError;
     OSStatus berr,err;
@@ -28,7 +31,7 @@ NSAppleEventDescriptor *ITSendAEWithString(NSString *sendString, FourCharCode ev
        return nil;
     }
     
-    berr = AEBuildAppleEvent(evClass, evID, typeProcessSerialNumber,(ProcessSerialNumber*)&psn, sizeof(ProcessSerialNumber), kAutoGenerateReturnID, 0, &sendEvent, &buildError, usendString);
+    berr = AEBuildAppleEvent(evClass, evID, typeProcessSerialNumber,psn, sizeof(ProcessSerialNumber), kAutoGenerateReturnID, 0, &sendEvent, &buildError, usendString);
     send = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&sendEvent] autorelease];
     if (!berr) [send logDesc];
     
@@ -37,7 +40,15 @@ NSAppleEventDescriptor *ITSendAEWithString(NSString *sendString, FourCharCode ev
     }
     
     err = AESend(&sendEvent, &replyEvent, kAEWaitReply, kAENormalPriority, kNoTimeOut, NULL, NULL);
-    recv = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&replyEvent] autorelease];
+    
+    err = AESizeOfParam(&replyEvent, keyDirectObject, &resultType, &resultSize);
+    if (resultSize == 0 || err != 0) {
+        return nil;
+    }
+    
+    AEGetParamDesc(&replyEvent, keyDirectObject, resultType, &resultDesc);
+    
+    recv = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&resultDesc] autorelease];
     if (!err) [recv logDesc];
     
     if (err) {
@@ -51,7 +62,7 @@ NSAppleEventDescriptor *ITSendAEWithKey(FourCharCode reqKey, FourCharCode evClas
     return nil;
 }
 
-NSAppleEventDescriptor *ITSendPlainAE(FourCharCode eClass, FourCharCode eID,const ProcessSerialNumber *psn)
+NSAppleEventDescriptor *ITSendAE(FourCharCode eClass, FourCharCode eID,const ProcessSerialNumber *psn)
 {
     AEDesc dest;
     int pid;
@@ -63,7 +74,7 @@ NSAppleEventDescriptor *ITSendPlainAE(FourCharCode eClass, FourCharCode eID,cons
         ITDebugLog(@"Error getting PID of application.");
        return nil;
     }
-    cerr = AECreateDesc(typeProcessSerialNumber,(ProcessSerialNumber*)&psn,sizeof(ProcessSerialNumber),&dest);
+    cerr = AECreateDesc(typeProcessSerialNumber,psn,sizeof(ProcessSerialNumber),&dest);
     nsd = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&dest] autorelease];
     cerr2 = AECreateAppleEvent(eClass,eID,&dest,kAutoGenerateReturnID,kAnyTransactionID,&event);
     nse = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&event] autorelease];