让 AppleScript 等待应用程序完成加载

让 AppleScript 等待应用程序完成加载

我有一个 applescript 来启动我的工作环境,但对它有一点小问题。我希望脚本启动几个程序,然后在它们启动后隐藏它们。代码目前如下所示:

tell application "Firefox" to activate

delay 0.5

tell application "Finder"
  set visible of process "Firefox" to false
end tell

明显地,延迟 0.5只是一个占位符,理想情况下,我希望在程序加载完成后立即隐藏它。不幸的是,我的加载时间变化很大(从 0.2 到 5 秒)是否有类似回调或函数来监视应用程序的事件?

答案1

循环查询可见性状态,重复将其设置为不可见,直到有效:

set appname to "Firefox"
tell application appname to launch
tell application "System Events"
    repeat until visible of process appname is false
        set visible of process appname to false
    end repeat
end tell

监控 AppleScript 编辑器的事件日志,显然可能需要几次尝试;当我使用 Xcode 尝试时,以下内容重复了 1490 次:

set visible of process "Xcode" to false
get visible of process "Xcode"
    --> true

在它最终发挥作用之前:

set visible of process "Xcode" to false
get visible of process "Xcode"
    --> false

答案2

通常情况下,您不需要添加任何延迟,但在这种情况下,即使您将 visibile 属性设置为 false,在应用程序完成打开后,它也会重新设置为 true。因此,您无法检查其值或进程是否存在。

您可以使用launchopen -jg打开没有可见窗口的应用程序。launch如果应用程序之前未打开,则打开一个新窗口open -jg。如果应用程序已打开但没有可见窗口,则打开一个新窗口。

set b to "com.apple.TextEdit"
tell application "System Events"
    if bundle identifier of processes contains b then
        launch application id b
    else
        do shell script "open -jgb " & b
    end if
end tell

一些应用程序(例如 Alfred、Growl、nvALT、The Unarchiver 和 X11)无法与它们配合使用。您可能只需要在设置visible为 false 之前添加一个固定延迟。

相关内容