程序化终止后重新打开Finder窗口

时间:2016-11-26 10:53:01

标签: swift macos cocoa swift2 finder

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

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

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

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

现在,当Finder再次启动时,之前打开的窗口已经关闭。我想重新打开它们,无论用户在退出和重新打开应用程序时退出窗口的首选项是什么。

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

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

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

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