Qt for Mac 设置软件开机自启动
生活随笔
收集整理的這篇文章主要介紹了
Qt for Mac 设置软件开机自启动
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Qt程序中設置Mac軟件的開機自啟動,通過調用object-c代碼來實現。
目前只測試過在非沙盒的環境下設置開機自啟動,沙盒環境下沒有測試過(設置方式不同,會比較復雜)
新建類,定義接口
// To convert a QString into NSString * #define QStringToNSString(s) [NSString stringWithUTF8String:s.toUtf8().data()]void OSXUtil::setAutoStart(QString appPath, bool isAutoStart) {if(isAutoStart){LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);//url為app所在的目錄CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:QStringToNSString(appPath)];LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemLast, NULL, NULL, url, NULL, NULL);CFRelease(item);CFRelease(loginItems);}else{UInt32 seedValue;CFURLRef thePath;LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);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:QStringToNSString(appPath)]){LSSharedFileListItemRemove(loginItems, itemRef); // 刪除指定的啟動項}CFRelease(thePath);}}CFRelease(loginItemsArray);CFRelease(loginItems);} }
與50位技術專家面對面20年技術見證,附贈技術全景圖
目前只測試過在非沙盒的環境下設置開機自啟動,沙盒環境下沒有測試過(設置方式不同,會比較復雜)
新建類,定義接口
void?setAutoStart(QString?appPath,bool?isAutoStart);
// To convert a QString into NSString * #define QStringToNSString(s) [NSString stringWithUTF8String:s.toUtf8().data()]void OSXUtil::setAutoStart(QString appPath, bool isAutoStart) {if(isAutoStart){LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);//url為app所在的目錄CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:QStringToNSString(appPath)];LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemLast, NULL, NULL, url, NULL, NULL);CFRelease(item);CFRelease(loginItems);}else{UInt32 seedValue;CFURLRef thePath;LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);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:QStringToNSString(appPath)]){LSSharedFileListItemRemove(loginItems, itemRef); // 刪除指定的啟動項}CFRelease(thePath);}}CFRelease(loginItemsArray);CFRelease(loginItems);} }
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的Qt for Mac 设置软件开机自启动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt QWidget控件透明动画实现
- 下一篇: Qt on Andoird 添加开机启动