• loginitem


    + (BOOL) willStartAtLogin:(NSURL *)itemURL
    {
        Boolean foundIt=false;
        LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
        if (loginItems) {
            UInt32 seed = 0U;
            NSArray *currentLoginItems = [NSMakeCollectable(LSSharedFileListCopySnapshot(loginItems, &seed)) autorelease];
            for (id itemObject in currentLoginItems) {
                LSSharedFileListItemRef item = (LSSharedFileListItemRef)itemObject;
    
                UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes;
                CFURLRef URL = NULL;
                OSStatus err = LSSharedFileListItemResolve(item, resolutionFlags, &URL, /*outRef*/ NULL);
                if (err == noErr) {
                    foundIt = CFEqual(URL, itemURL);
                    CFRelease(URL);
    
                    if (foundIt)
                        break;
                }
            }
            CFRelease(loginItems);
        }
        return (BOOL)foundIt;
    }
    
    + (void) setStartAtLogin:(NSURL *)itemURL enabled:(BOOL)enabled
    {
        OSStatus status;
        LSSharedFileListItemRef existingItem = NULL;
    
        LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
        if (loginItems) {
            UInt32 seed = 0U;
            NSArray *currentLoginItems = [NSMakeCollectable(LSSharedFileListCopySnapshot(loginItems, &seed)) autorelease];
            for (id itemObject in currentLoginItems) {
                LSSharedFileListItemRef item = (LSSharedFileListItemRef)itemObject;
    
                UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes;
                CFURLRef URL = NULL;
                OSStatus err = LSSharedFileListItemResolve(item, resolutionFlags, &URL, /*outRef*/ NULL);
                if (err == noErr) {
                    Boolean foundIt = CFEqual(URL, itemURL);
                    CFRelease(URL);
    
                    if (foundIt) {
                        existingItem = item;
                        break;
                    }
                }
            }
    
            if (enabled && (existingItem == NULL)) {
                LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst,
                                              NULL, NULL, (CFURLRef)itemURL, NULL, NULL);
    
            } else if (!enabled && (existingItem != NULL))
                LSSharedFileListItemRemove(loginItems, existingItem);
    
            CFRelease(loginItems);
        }       
    }

    If you want an easy to implement checkbox, make a @property BOOL startAtLogin; in one of your classes and implement it as follows. Just bind the checkbox value to the property and it should all work seamlessly.

    - (NSURL *)appURL
    {
        return [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
    }
    
    - (BOOL)startAtLogin
    {
        return [LoginItem willStartAtLogin:[self appURL]];
    }
    
    - (void)setStartAtLogin:(BOOL)enabled
    {
        [self willChangeValueForKey:@"startAtLogin"];
        [LoginItem setStartAtLogin:[self appURL] enabled:enabled];
        [self didChangeValueForKey:@"startAtLogin"];
    }
  • 相关阅读:
    [BZOJ 1295][SCOI2009]最长距离(SPFA+暴力)
    [BZOJ 3143][HNOI2013]游走(数学期望)
    [BZOJ 1797][AHOI2009]最小割(最小割关键边的判断)
    [BZOJ1876][SDOI2009]superGCD(高精度)
    [BZOJ1801][AHOI2009]中国象棋(递推)
    [bzoj2245][SDOI2011]工作安排(费用流)
    [bzoj 1064][NOI2008]假面舞会(dfs判断环)
    [BZOJ 1486][HNOI2009]最小圈(二分答案+dfs写的spfa判负环)
    2.3、操纵json、parquet、jdbc数据库
    输入框中的添加回车事件
  • 原文地址:https://www.cnblogs.com/watchdatalearn2012620/p/3182511.html
Copyright © 2020-2023  润新知