Mac OS X:登录时打开应用程序,不显示主窗口

时间:2011-04-08 15:29:44

标签: cocoa macos login

我正在开发一个我希望在用户登录时自动启动的应用程序。关于如何执行此操作有几个答案,特别是我正在使用this GitHub repository中的代码,并且它工作正常。

我现在想要的,无法找到怎么做,是启动应用程序但没有显示主窗口。这只有当应用程序在登录时启动时,如果应用程序关闭并且用户在Dock(或其他)中单击打开它,我希望它显示窗口。

有可能吗?关于如何做到这一点的任何想法?

在Accounts系统首选项中,您设置在登录时启动的应用程序,有一个“隐藏”检查可以执行我想要的操作,但我想以编程方式执行此操作。

1 个答案:

答案 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函数。