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

来源:互联网 发布:索尼淘宝官方旗舰店 编辑:程序博客网 时间:2024/06/05 16:36

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

测试环境: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);}


0 0
原创粉丝点击