将应用程序放在前面

时间:2018-11-07 10:22:34

标签: macos applescript

如何将应用程序放在前面?

即假设/Applications/MyApp.app已经开始;一次我想通过将MyApp.app窗口的路径传递到AppleScript:myApplScript.scpt /Applications/MyApp.app来使该窗口最前面。

我尝试使用此脚本,但这对我不起作用:

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

谢谢!

2 个答案:

答案 0 :(得分:2)

通常,您要做的只是activate应用程序,它会将焦点切换到该应用程序(即使该应用程序已经在运行):

activate application "MyApp"

您可以直接使用此命令及其路径,如下所示:

activate application "/Applications/MyApp.app"

,或者在您的特定情况下,

activate application apppath

尽管您不需要。

如果这不起作用,则可以尝试系统事件

tell application "System Events" to set frontmost of process "MyApp" to true

或使用其路径:

tell application "System Events" to set the frontmost of the first process ¬
    whose POSIX path of application file is "/Applications/MyApp.app" to true

答案 1 :(得分:-1)

您是否尝试过检查该过程的打开文件? 有几种方法可以做到这一点(请参阅:this article

通常,应用程序二进制文件将是进程的打开文件。 请记住,二进制可执行文件可能包含在软件包中,您需要通过在finder中执行show package contents然后将路径附加到软件包中的可执行文件的方式来查找二进制可执行文件。在程序包中的/Contents/MacOs/下检查。

如果您有许多开放的流程,这可能会花费很长时间,因此经常运行不太实用。 还应考虑到一个可执行文件可以在一个以上流程实例中运行。

可惜的是,标准的活动监视器不能用applescript编写脚本,我刚刚验证了这一希望,希望能获得对applescript友好的解决方案。您仍然可以通过调用shell命令行来达到相同的结果。

通常,进程名称与文件名相同或相似,但这取决于您要查找的应用程序或进程。

我猜您必须安装同一应用程序的不同版本,才能通过路径名检查该应用程序?

或者,如果您不需要动态找出路径名,则可以使用“活动监视器”或在命令行上预先查找它。在这里,您可以标识与从指定路径启动的正在运行的应用程序相对应的进程名称。事先知道进程名称即可轻松进行,您只需使用

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

要解决任何流程唯一性问题,以防万一同一应用程序运行更多,那么一旦您始终可以得出pid或Unix流程ID。这是article关于如何在运行的应用程序的applescript中获取pid的信息