程序终止后重新打开 Finder windows
Re-open Finder windows after programmatic termination
我正在开发一个需要重新启动 Finder 才能显示更改的实用程序。
我使用 NSRunningApplication
的 terminate
函数来确保没有复制操作发生等 (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")
}
我正在开发一个需要重新启动 Finder 才能显示更改的实用程序。
我使用 NSRunningApplication
的 terminate
函数来确保没有复制操作发生等 (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")
}