macOS:如何检测应用程序';s的finder图标已打开?

macOS:如何检测应用程序';s的finder图标已打开?,macos,finder,Macos,Finder,当macOS应用程序已经打开并运行时,是否有任何方法可以检测其Finder图标何时打开 在这种情况下,打开其Finder图标会导致应用程序处于活动状态,我可以使用NSNotificationCenter或应用程序委托的ApplicationIDBecomeActive:方法检测该事件 然而,到目前为止,我还没有找到一种方法来区分激活事件与应用程序激活的任何其他方式,例如单击其窗口、单击其Dock图标、使用command+tab切换到它、使用AppleScript激活它等等。我试图检查这些情况是否

当macOS应用程序已经打开并运行时,是否有任何方法可以检测其Finder图标何时打开

在这种情况下,打开其Finder图标会导致应用程序处于活动状态,我可以使用
NSNotificationCenter
或应用程序委托的
ApplicationIDBecomeActive:
方法检测该事件

然而,到目前为止,我还没有找到一种方法来区分激活事件与应用程序激活的任何其他方式,例如单击其窗口、单击其Dock图标、使用command+tab切换到它、使用AppleScript激活它等等。我试图检查这些情况是否使用apple事件来激活带有
[[NSAppleEventManager sharedapleeventmanager]currentAppleEvent]
的应用程序,但它返回nil,因为没有当前的apple事件,因此没有帮助。

在这样一个重新打开的事件上调用app delegate方法


请注意,从Finder、Launchpad或Dock(重新)打开与设计相同。

假设您编写了上述程序,您可以让它在第一次打开时发出警报。这个应用程序的用例是什么?@Laif我正在开发的应用程序是一个只支持后台的启动代理程序,我希望打开它的Finder图标可以显示它的UI。如果它是一个只支持后台的应用程序,它甚至不应该有Dock图标。你确定这就是你的意思吗?是的,我的特定应用程序大多数时候都没有停靠图标。我特别感兴趣的是检测它的Finder图标何时被打开,而它没有Dock图标。我要补充的是,有可能知道是什么原因导致应用程序被重新打开。您可以在
-applicationShouldHandleReopen:hasVisibleWindows:
方法中使用
NSAppleEventDescriptor*AppleeEvent=[[NSAppleEventManager sharedAppleEventManager]CurrentAppleeEvent]
获取触发它的apple事件,然后使用
[[AppleeEvent attributeDescriptorForKeyword:keySenderPIDAttr]int32Value]
。如果pid与查找器的pid匹配,则是打开查找器图标导致应用程序重新打开。