【问题标题】:Run an Applescript application at launch在启动时运行 Applescript 应用程序
【发布时间】:2021-08-23 12:37:31
【问题描述】:

所以我有一个 Applescript,它不是很消耗资源,所以我总是希望它运行。如果我尝试将其保存为应用程序,则可以勾选选项Show startup screenStay open after run handler,但我认为这不是我想要的。我很确定你可以做到这一点,因为它在 this blogpost 中提到,引用:

每当计算机启动时,我发现自己正在编写一段 applescript 来……。

我发现无法在线进行此操作,因此我们将不胜感激。

【问题讨论】:

    标签: macos applescript boot system-startup


    【解决方案1】:

    这是以编程方式将您的应用程序添加到启动项的脚本:

    on addAppToLoginItemsAfterCheckingInOnes(appName)
        
        try
            set appPath to (path to application appName)
        on error
            display notification "Application with this name NOT founded" sound name "Frog"
            return
        end try
        
        tell application "System Events"
            try
                set allLoginItems to name of every login item
            on error
                set allLoginItems to {}
            end try
            if {appName} is not in allLoginItems then tell application "System Events" to make login item at end with properties {path:appPath, hidden:false}
        end tell
        
    end addAppToLoginItemsAfterCheckingInOnes
    
    my addAppToLoginItemsAfterCheckingInOnes("BBEdit")
    

    注意:在 Catalina 和 Big Sur 上登录项的三个属性(种类、路径和名称)都是只读的。这是苹果的安全变化。因此,您应该使用系统偏好设置的用户和组窗格手动添加登录项。需要身份验证。

    【讨论】:

    • 为什么是'作为字符串'?这不会允许误报吗?
    • 是的,Catalina 和 Big Sur 上登录项的三个属性(种类、路径和名称)都是只读的。这是苹果的安全变化。因此,您应该使用“系统偏好设置”的“用户和组”窗格手动添加登录项。
    • 回复@Mockman:为什么是字符串?因为 每个登录项的名称list,其中包含 2 个或更多项。因此,if appName is not in allLoginItems 语句会在没有 as string coercion 的情况下给出错误的比较。但是如果我们以其他方式写 if staement,我们可以省略 as stringif {appName} is not in allLoginItems...
    • @RobertKniazidis 'As string' 会将所有登录项名称连接成一个字符串,例如“iTunesHelperEyeTV 助手”。一个名为“iTunes”的应用程序会匹配,因为您要询问一个字符串是否包含在另一个字符串中。如果测试是“作为列表”,则将单独比较列表项,而“iTunes”将不匹配。当然,我在 Sierra,所以获取登录项的结果可能已经改变。
    • 你是对的,最好使用 {appName} 而不是字符串强制。我更新了答案。
    【解决方案2】:

    使用 on idle 处理程序并将脚本保存为保持打开的应用程序是通常(且正确)的方法。但是,正如您所说,您希望按原样启动脚本并保持运行。你可以用无限循环来包装你的脚本:

    repeat
    -- your script here
    end repeat
    

    注意:您应该在脚本中设置一些条件,以便在需要时退出脚本。

    【讨论】:

    • 我知道无限循环,但是有什么方法可以做到这一点,而不必每次我的机器启动时都运行应用程序?
    • 将您的脚本(使用空闲处理程序)保存为保持打开的应用程序。然后将其添加到根目录的Library文件夹的StartupItems文件夹中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    相关资源
    最近更新 更多