3

Cocoa アプリは LSSharedFileList、 のログイン項目のリストに自分自身を追加できます。これにより、ユーザーがログインしたときにアプリケーションを開始できるようになります。ただし、ユーザーがアプリケーションを開始したか、ログイン時にアプリを自動開始したかを確認する方法はありますか? あるケースではユーザー インターフェイスを別のケースで表示でき、UI を非表示にしてアプリをメニューバー アプリとしてバックグラウンドで実行できるため、これは便利です。

4

1 に答える 1

0

このためのコードを次に示します。ログイン項目に対して何が返されるかはわかりませんが、試してコメントしていただければ、投稿を更新します。com.apple.FinderFinder と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 に答える