程序终止后重新打开 Finder windows

Re-open Finder windows after programmatic termination

我正在开发一个需要重新启动 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再次启动时,之前打开的windows已经关闭了。我想重新打开它们,不管用户对 "Restore windows when quitting and re-opening apps".

的偏好如何

这是因为 Finder 重启是我的软件 activity 的副作用,用户绝对不打算关闭 windows。

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

如有任何帮助,我们将不胜感激!

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

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