Re: Test for launched from (Apple)Script?
Re: Test for launched from (Apple)Script?
- Subject: Re: Test for launched from (Apple)Script?
- From: vinai <email@hidden>
- Date: Wed, 10 Nov 2010 14:08:59 -0800 (PST)
--- On Wed, 11/10/10, McLaughlin, Michael P. <email@hidden> wrote:
> Jonathan wrote:
>
>>> On 10 Nov 2010, at 18:34, McLaughlin, Michael P. wrote:
>>>
>>> Is there any standard way for a Cocoa app to test whether it was
>>> launched from a script, esp. AppleScript? I would like to set a
>>> flag to disable dialogs so that users could run the app in
>>> (faceless) batch mode.
>>>
>>> Thanks.
>>>
>>> --
>>> Mike McLaughlin
>>>
>>
>> Maybe it's just me but I am not sure if this question makes a whole
>> lot of sense.
>>
>> AppleScript runs in process so a multitude of applications could
>> launch your app by generating and dispatching the appropriate
>> AppleEvent.
>> Or do you want to ascertain if the app was launched by AppleScript
>> Editor.app?
>>
>> Is the app to be scripted by users?
>>
>> In that case it might be better to make your app scriptable and send
>> it an explicit event to request batch mode.
>
> The idea is that the app will be scriptable but I was trying to find
> a way to avoid forcing the user to send a special command to set a
> fromBatch flag (seems kludgy).
>
> I would like the user to be able to queue up a lot of separate input
> files (jobs) for the app to 1) process and 2) save results, disabling
> the various OK buttons, etc. that would normally have to be clicked.
> That way, the user could launch a script and come back later to a
> folder full of results without ever seeing the app.
>
> Most of the time, the normal app behavior would be interactive (a GUI).
>
> --
>
> Mike McLaughlin
Mike,
What I did was to check the value of argc that your main function sees in main.m
If there are more than 2 arguments (and that was something I never fully resolved - my app is 1 argument on the command line, but I never figured out what the 2nd one is). Regardless, if I call my application via:
path to application.app folder/Contents/MacOS/applicationBinary
with more than 2 arguments on the command line, I call a function to process command line arguments, which then directly initializes the necessary objects and puts my application in "batch mode".
If argc <= 2, then in my code I call:
return NSApplicationMain (argc, (const char **) argv);
which happily launches a graphical front end and lets the user interact with my app from the OS X or GNUStep GUI (it can be compiled and run on either OS X or any linux distro that ships the GNUStep libraries).
My solution is very ugly, but entirely functional for my needs. After I acquire data, I can pull up a sample via the GUI, see how the processing works, and can tweak parameters there and get direct feedback. I can then put those parameters into a shell script and drive the program in batch mode. I had my doubts when I first did this, but as ugly as it is under the hood, it's entirely stable and functional.
Hope this helps!
cheers
vinai
_______________________________________________
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