When an application is launched without a document to open or print, it receives an 'oapp'
(a.k.a. kAEOpenApplication
) Apple Event. That event may have a property data (keyAEPropData
) parameter. For an ordinary launch, that parameter is absent or 0. For a launch from a login item, it's keyAELaunchedAsLogInItem
. (When your app is launched to provide a service, it's keyAELaunchedAsServiceItem
.)
https://developer.apple.com/legacy/library/documentation/Carbon/Reference/Apple_Event_Manager/index.html#//apple_ref/doc/constant_group/Launch_Apple_Event_Constants
You can check for this with the following code in your -applicationWill/DidFinishLaunching:
method:
NSAppleEventDescriptor* event = [[NSAppleEventManager sharedAppleEventManager] currentAppleEvent];
if ([event eventID] == kAEOpenApplication &&
[[event paramDescriptorForKeyword:keyAEPropData] enumCodeValue] == keyAELaunchedAsLogInItem)
{
// you were launched as a login item
}
Swift 3:
let event = NSAppleEventManager.shared().currentAppleEvent
let launchedAsLogInItem =
event?.eventID == kAEOpenApplication &&
event?.paramDescriptor(forKeyword: keyAEPropData)?.enumCodeValue == keyAELaunchedAsLogInItem
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…