Reputation: 1076
How can I bring an application to front by its path?
i.e. Assume /Applications/MyApp.app
have already started; At a time I want to bring that MyApp.app window to front by passing its path to AppleScript: myApplScript.scpt /Applications/MyApp.app
.
I tried by this script, but this did not worked for me:
on run argv
set apppath to (item 1 of argv) as string
tell application "System Events"
set frontmost of every process whose path is apppath to true
end tell
end run
Thanks!
Upvotes: 5
Views: 2651
Reputation: 79
Have you tried checking for the open files for the process? There are several ways of doing this (see: this article)
Normally the application binary will be an open file of the process.
Keep in mind that the binary executable may be contained in a package and you will need to look for it by doing a show package contents
in finder and then appending the path to the executable in the package. In the package check under /Contents/MacOs/
.
This might take a long time if you have many open processes and therefore not very practical to run often. Also take into account that a single executable file can be running in more then one process instance.
A pity that the standard Activity Monitor is not scriptable with applescript which I just verified hoping for a more applescript friendly solution. You should still be able to achieve the same result via calling the shell command line.
Also often the process name is equal or similar to the filename but that depends on the application or process you're looking for.
I'm guessing you must have different versions of the same app installed that you need to check for the application by pathname?
Or if you don't need to figure out the path name dynamically you can simply look it up in advance using the Activity Monitor or on the command line. There you can identify the process name that corresponds to you your running application that was started from the specified path. Knowing the process name in advance then makes it easy and you can simply use
tell application "System Events" to get application process "Name of My Application"
--insert the actions you want to perform on your running app here
end tell
To solve any process uniqueness issues in case the same app is running more then once you can always result to the pid
or unix process Id. Here's an article on how to get the pid in applescript of a running app
Upvotes: -1
Reputation: 6112
Usually, all you need to do is to activate
the application, which switches focus to it (even if the application is already running):
activate application "MyApp"
You can use this command directly with its path like this:
activate application "/Applications/MyApp.app"
or, in your specific case,
activate application apppath
although you shouldn't need to.
If that doesn't work, you can try System Events:
tell application "System Events" to set frontmost of process "MyApp" to true
or, using its path:
tell application "System Events" to set the frontmost of the first process ¬
whose POSIX path of application file is "/Applications/MyApp.app" to true
Upvotes: 5