【问题标题】:get applications associated with certain file on macOS在 macOS 上获取与特定文件关联的应用程序
【发布时间】:2021-12-20 16:45:38
【问题描述】:

我可以使用这个脚本找到与某个文件关联的默认应用程序。

tell application "Finder"
    default application of (info for POSIX file "/Users/vk/Pictures/DSCF3320.jpg")
end tell

但是有没有办法列出与此文件关联的所有应用程序? IE。单击“打开方式”时在 Finder 中显示的相同列表?

代码在 AppleScript 中,但我不一定要求解决方案在 AppleScript 中。

【问题讨论】:

    标签: macos applescript


    【解决方案1】:

    其实我发现这个简单的python脚本正是我需要的:

    import sys
    from AppKit import NSURL
    from LaunchServices import LSCopyApplicationURLsForURL, kLSRolesAll
         
    url = NSURL.fileURLWithPath_(sys.argv[1])
    for url in LSCopyApplicationURLsForURL(url, kLSRolesAll):
        print url.path()
    

    【讨论】:

    • 注意:这可能不会返回 Finder 中的打开方式 上下文菜单项 下列出的所有应用程序 。例如,在我的系统上,例如/path/to/filename.jpg 列出了 12 个项目,而这只返回了其中的 7 个。明显缺少的是安装在我的系统上的 4 个 Web 浏览器,这些浏览器显示在 Open With context menu item 但不在 code 的输出中在这个答案中。
    • @user3439894。我认为,通过 kLSRolesAll 而不是 kLSRolesEditor 应该返回所有 12 个项目。
    • @Robert Kniazidis,假设返回的第一个项目始终是它的当前默认值是否安全? (只是好奇。)
    • @Robert Kniazidis 你是对的,谢谢。我更新了我的答案以使用 kLSRolesAll。它似乎列出了所有应用程序。与 Finder 上下文菜单相比,只是有点乱。最好让它们按相同的顺序排列,但如果不是,也没什么大不了的。
    • @user3439894,我不知道。方法文档说明了 macOS 10.15 及更高版本上的最佳顺序,但没有说明默认项。所以,需要测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2014-07-03
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多