[OS X]如何利用API设置OS X应用开机自启动

我废话就不多说了,直接贴上代码了;

测试环境:Mac OS X 10.9.X /10.10


#import <Foundation/Foundation.h>
#import <Foundation/NSURL.h>

/**
 * @brief AutoStartClient 开机自启动
 * @param pAppPath 应用程序路径
 * @param isStart 是否开机启动, true 开机启动, false 取消开机启动
 */
void AutoStartClient(const char* pAppPath, bool isStart)
{
    NSString* appPath = [[NSString alloc]initWithFormat:@"%s", pAppPath];

    NSLog(appPath);

    LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);

    if(isStart){

         //url为app所在的目录

        CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath];

        LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemLast, NULL, NULL, url, NULL, NULL);

        CFRelease(item);
    }else{
        UInt32 seedValue;

        CFURLRef thePath;

        CFArrayRef loginItemsArray = LSSharedFileListCopySnapshot(loginItems, &seedValue);

        for (id item in (NSArray *)loginItemsArray) {

            LSSharedFileListItemRef itemRef = (LSSharedFileListItemRef)item;

            if (LSSharedFileListItemResolve(itemRef, 0, (CFURLRef*) &thePath, NULL) == noErr) {

               //appPath目录为要取消开机启动app的路径
               if ([[(NSURL *)thePath path] hasPrefix:appPath])
               {
                  LSSharedFileListItemRemove(loginItems, itemRef); // 删除指定的启动项
               }
               CFRelease(thePath);
            }
        }

        CFRelease(loginItemsArray);
    }
    CFRelease(loginItems);
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值