Re: Launch app with params as front process and wait?
Re: Launch app with params as front process and wait?
- Subject: Re: Launch app with params as front process and wait?
- From: Gaurav Srivastava <email@hidden>
- Date: Sat, 17 Apr 2010 23:13:19 +0530
Hi Ken,
Thanks for the prompt reply. I got a better insight into the APIs. But
somehow I am not able to fix my problem.
I am using following:
NSTask* task = [NSTask launchedTaskWithLaunchPath:@"path" arguments:args];
int pid = [task processIdentifier];
ProcessSerialNumber psn;
GetProcessForPID(pid, &psn);
SetFrontProcess(&psn);
[task waitUntilExit];
SetFrontProcess(&psn);
Even on switching to NSWorkSpace doesn't seem to solve the purpose. The
launched application does not get highlighted. Also, one more issue I am
facing is how to send custom events from launched application to parent
application. Thanks in advance.
On Sat, Apr 17, 2010 at 7:13 PM, Ken Thomases <email@hidden> wrote:
> On Apr 17, 2010, at 8:14 AM, Gaurav Srivastava wrote:
>
> > I was working with NSTask and came across some issues. I searched on the
> > internet and found that there has been a similar query but that didn't
> have
> > any solution. The link for that is
> > http://lists.apple.com/archives/cocoa-dev//2003/May/msg01468.html. Could
> you
> > suggest any possible solution for this.
> >
> > Also, if my parent application has a non-modal dialog up, on launching
> > another app, it goes behind the non-modal dialog. Please suggest some
> > solution as I am stuck with it for last few days.
>
> To launch a secondary application, you should use NSWorkspace or Launch
> Services. That will bring it to the front, even if it's already running.
> To wait until it's finished, you can use the techniques outlined in this
> tech note <http://developer.apple.com/mac/library/technotes/tn/tn2050.html
> >.
>
> If you need to pass information into the other application, and you control
> the implementation of that application, I recommend using one of:
>
> * -[NSWorkspace launchApplicationAtURL:options:configuration:error:] with
> the relevant information in the configuration parameter
>
> * -[NSWorkspace
> launchAppWithBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifier:]
> with an AppleEvent descriptor
>
> * LSOpenFromURLSpec() with an AppleEvent descriptor in the passThruParams
> fields of the inLaunchSpec parameter
>
> You can also pass information into the application through a scripting
> interface.
>
>
> If you don't control the implementation of the other application and the
> above techniques don't suffice, you can use NSTask to launch it, but it
> wouldn't be my first choice. If you need to bring it to the foreground,
> you'd want to use NSWorkspace to monitor for when it's launched and ready,
> and then activate it. You know when it is launched when you receive the
> NSWorkspaceDidLaunchApplicationNotification notification which matches the
> application that you ran. On 10.6 and later, you get an
> NSRunningApplication object with that notification, and you can activate it
> by invoking -activateWithOptions: on it. For 10.5 and earlier, you get a
> dictionary that includes a ProcessSerialNumber, and you can use
> SetFrontProcess with that.
>
> Regards,
> Ken
>
>
--
Gaurav Srivastava
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden