我废话就不多说了,直接贴上代码了;
测试环境: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);
}