【问题标题】:Re-open Finder windows after programmatic termination程序终止后重新打开 Finder 窗口
【发布时间】:2017-04-10 14:21:01
【问题描述】:

我正在开发一个实用程序,它需要重新启动 Finder 才能显示更改。

我使用NSRunningApplicationterminate 函数来确保不会发生复制操作等(swift):

let apps = NSRunningApplication.runningApplicationsWithBundleIdentifier("com.apple.finder")
if apps.count > 0 {
    let finder = apps[0]
    finder.terminate()
}

由于我在sharedWorkspace.notificationCenter 中侦听NSWorkspaceDidTerminateApplicationNotification,因此我可以使用launchAppWithBundleIdentifier 再次启动Finder。所有这一切都很好。

现在,当 Finder 再次启动时,之前打开的窗口已关闭。无论用户对“退出和重新打开应用程序时恢复窗口”的偏好如何,我都想重新打开它们。

这是因为 Finder 重新启动是我的软件活动的副作用,并且用户绝对不打算关闭窗口。

我可能会看到 AppleScript 发生这种情况,但我没有足够的经验来设计一种方法来获取所有窗口状态(包括窗口位置和大小),在 Finder 重新启动期间存储它们,然后重新打开它们。

任何帮助将不胜感激!

【问题讨论】:

    标签: swift macos cocoa swift2 finder


    【解决方案1】:

    有趣的是,我居然在没想到的地方找到了答案:Finder defaults。碰巧 (source),有一个名为 NSQuitAlwaysKeepsWindows 的隐藏首选项允许在重新启动后恢复 Finder 窗口。

    if let finderDefaults = NSUserDefaults(suiteName: "com.apple.finder") {
        finderDefaults.setBool(true, forKey: "NSQuitAlwaysKeepsWindows")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多