3

Cocoa 应用程序可以将自己添加到 LSSharedFileList登录项列表中。这将允许在用户登录时启动应用程序。但是,有没有办法判断用户是启动应用程序还是应用程序在登录时自动启动?这很有用,因为在一种情况下,我们可以在另一种情况下显示用户界面,我们可以隐藏 UI 并将应用程序作为菜单栏应用程序在后台运行。

4

1 回答 1

0

这是一些代码。我不确定它会为登录项返回什么,但是如果您尝试一下并发表评论,我会更新帖子。它确实com.apple.Finder为 Finder 和com.apple.dt.XcodeXcode 返回。

+ (NSString *) bundleIdentifierOfParentProcess {
    NSString *result = nil;
    ProcessSerialNumber psn = {0, 0};
    if (0 == GetCurrentProcess(&psn)) {
        ProcessInfoRec myProcessInfo;
        myProcessInfo.processInfoLength = sizeof(ProcessInfoRec);
        myProcessInfo.processName = NULL;
        myProcessInfo.processAppRef = NULL;
        if (0 == GetProcessInformation(&psn, &myProcessInfo)) {
            ProcessSerialNumber parentPSN = myProcessInfo.processLauncher;
            CFDictionaryRef parentProcessInfo =
            ProcessInformationCopyDictionary(&parentPSN,
                                             kProcessDictionaryIncludeAllInformationMask);
            if (parentProcessInfo) {
                result =
                [(__bridge NSDictionary *) parentProcessInfo objectForKey:
                (__bridge id) kCFBundleIdentifierKey];
                CFRelease(parentProcessInfo);
            }
        }
    }
    return result;
}

parentProcessInfo是一个充满值的字典,如果捆绑标识符不够有意义,它也可能会有所帮助。

于 2013-03-13T23:37:10.677 回答