Very accurate advices, as usual from you, Arnaud.
I didn't know BundleID.
Thanks a lot.
Jean-Luc Arnaud
Le 10/09/2014 13:26, Marnaud a écrit :
> Le 10 sept. 2014 à 11:41, Jean-Luc Arnaud a écrit:
>
>> Here is what I coded:
>>
>> f=LaunchServicesFindApplicationForInfoMBS("","com.apple.systemevents","")
>> f.Launch False
>>
>> p=new ProcessMBS
>> While p.Name<>"Événements système" ' Loop waiting for
>> SystemEvents to be launched ("Événements système" in French)
>> p.GetFirstProcess
>> Do ' Loop checking if SystemEvents is running
>> If p.Name="Événements système" Then exit
>> Loop until not p.GetNextProcess
>> Wend
>>
>> ae=new AppleEvent("prcs","kcod","com.apple.systemevents")
>> ae.IntegerParam("----")=53
>> call ae.Send
>>
>> Thanks a lot.
> You're welcome. Your code is good for your purpose, but I'd like to suggest
> some changes:
> (1) After
> f=LaunchServicesFindApplicationForInfoMBS("","com.apple.systemevents",""),
> please check against nil (if System Events, for whatever reason, isn't
> installed, it's always better to not have your application crashing).
> (2) Relying on the application's name isn't perfect. All an user has to do to
> make your app waiting forever is go to system preferences (“Language&Text” or
> “International” pane, given the OS version), put “English” on top and use
> your app ;-). Instead, I suggest you waiting for the BundleID (when
> p.BundleID="com.apple.systemevents"). BundleID has this purpose of being the
> same in every language.
> (3) Perhaps a personal opinion, but the outer loop looks unreliable to me
> (you check for the content of “p” again). I'd suggest checking only once if
> the condition is met (e.g. setting a boolean in the inner loop).
>
> Might I suggest you a rewritten code?
>
> dim ae As AppleEvent
> dim b as boolean
> dim f As FolderItem
> dim p As ProcessMBS
>
> f=LaunchServicesFindApplicationForInfoMBS("","com.apple.systemevents","")
> if f<>nil then
> f.Launch False
>
> p=new ProcessMBS
> b=false //Should you use “b” another time and forget it can be true in the
> beginning (happens to me regularly)
> while not b
> p.GetFirstProcess
> Do ' Loop checking if SystemEvents is running
> If p.BundleID="com.apple.systemevents" Then
> b=true
> exit
> end if
> Loop until not p.GetNextProcess
> Wend
> end if
>
> ae=new AppleEvent("prcs","kcod","com.apple.systemevents")
> ae.IntegerParam("----")=53
> call ae.Send
>
> (sometimes, I tend to insert a delay after, in your code, “Loop until not
> p.GetNextProcess” of, say, one second, because it's not worth checking so
> many times per second if a process is running, but that's splitting hairs).
> _______________________________________________
> Mbsplugins_monkeybreadsoftware.info mailing list
> [email protected]
> https://ml01.ispgateway.de/mailman/listinfo/mbsplugins_monkeybreadsoftware.info
>
>
_______________________________________________
Mbsplugins_monkeybreadsoftware.info mailing list
[email protected]
https://ml01.ispgateway.de/mailman/listinfo/mbsplugins_monkeybreadsoftware.info