【发布时间】:2015-05-04 15:27:21
【问题描述】:
我的应用如何知道 Finder 已启动?有什么活动可以帮助解决这个问题吗?
我曾考虑枚举进程并查找 Finder,但这似乎太繁重,无法每 X 秒执行一次。有没有其他办法?
【问题讨论】:
-
嗯? Finder 一直在运行,不是吗?
-
@MarkSetchell:有些应用会重新启动 Finder,因此需要知道它何时启动。
我的应用如何知道 Finder 已启动?有什么活动可以帮助解决这个问题吗?
我曾考虑枚举进程并查找 Finder,但这似乎太繁重,无法每 X 秒执行一次。有没有其他办法?
【问题讨论】:
您可以观察NSWorkspace 发布到其通知中心(-[NSWorkspace notificationCenter])的通知。例如,它会在启动 GUI 应用程序时发布 NSWorkspaceDidLaunchApplicationNotification。该通知的userInfo 字典在NSWorkspaceApplicationKey 键下有一个NSRunningApplication 实例,用于新启动的应用程序。您可以检查其中的bundleIdentifier 是否等于“com.apple.finder”。
【讨论】:
NSWorkspaceDidLaunchApplicationNotification 的文档,其中解释了它的局限性。 (它仅适用于前台 GUI 应用程序。) C)这些文档推荐了一种替代技术来了解仅后台和 LSUIElement 应用程序。 D) 你真的不想要通知你启动或终止的每个进程(例如控制台程序)的东西。在像 OS X 这样的系统上,这种情况一直都在发生。
NSApplication 对象或调用NSApplicationMain() 或-[NSApplication run]。