我正在开发一个我希望在用户登录时自动启动的应用程序。关于如何执行此操作有几个答案,特别是我正在使用this GitHub repository中的代码,并且它工作正常。
我现在想要的,无法找到怎么做,是启动应用程序但没有显示主窗口。这只有当应用程序在登录时启动时,如果应用程序关闭并且用户在Dock(或其他)中单击打开它,我希望它显示窗口。
有可能吗?关于如何做到这一点的任何想法?
在Accounts系统首选项中,您设置在登录时启动的应用程序,有一个“隐藏”检查可以执行我想要的操作,但我想以编程方式执行此操作。
答案 0 :(得分:10)
好吧,我已经找到了怎么做......这个Open Radar bug report helped,我使用了错误的属性。
以下是代码:
- (void)enableLoginItemWithLoginItemsReference:(LSSharedFileListRef )theLoginItemsRefs ForPath:(NSString *)appPath {
// We call LSSharedFileListInsertItemURL to insert the item at the bottom of Login Items list.
CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath];
CFMutableDictionaryRef inPropertiesToSet = CFDictionaryCreateMutable(NULL, 1, NULL, NULL);
CFDictionaryAddValue(inPropertiesToSet, kLSSharedFileListLoginItemHidden, kCFBooleanTrue);
LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(theLoginItemsRefs, kLSSharedFileListItemLast, NULL, NULL, url, inPropertiesToSet, NULL);
if (item) {
CFRelease(item);
}
}
解决方案是使用密钥kLSSharedFileListLoginItemHidden和值 true 创建一个字典,并将其传递给LSSharedFileListInsertItemURL函数。