2016-11-26 3 views
0

Я разрабатываю утилиту, которая должна перезапустить Finder, чтобы изменения отображались.Повторно открыть окна Finder после завершения программы

Я использую terminate функцию NSRunningApplication «s, чтобы убедиться в отсутствии операции копирования не происходит, и т.д. (быстрое):

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

Поскольку я слушаю для NSWorkspaceDidTerminateApplicationNotification в sharedWorkspace.notificationCenter, я могу затем запустить Finder снова launchAppWithBundleIdentifier. Все это прекрасно.

Теперь, когда Finder запускается снова, окна, которые ранее были открыты, были закрыты. Я хотел бы повторно открыть их, независимо от предпочтений пользователя для «Восстановить окна при выходе и повторном открытии приложений».

Это связано с тем, что перезапуск Finder является побочным эффектом активности моего программного обеспечения, и пользователь определенно не собирался закрывать окна.

Возможно, я видел, как это происходит с AppleScript, но я недостаточно опытен, чтобы создать способ получить все состояния окон (включая размещение и размер окна), сохранить их во время перезапуска Finder и повторно открыть их позже.

Любая помощь была бы принята с благодарностью!

ответ

0

Забавно, я действительно нашел ответ где-то, чего я не ожидал: Finder defaults. Как это происходит (source), есть скрытая прецедента с именем NSQuitAlwaysKeepsWindows, которая позволяет восстанавливать окна Finder после перезапуска.

if let finderDefaults = NSUserDefaults(suiteName: "com.apple.finder") { 
    finderDefaults.setBool(true, forKey: "NSQuitAlwaysKeepsWindows") 
} 
Смежные вопросы