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

6
我正在开发一个应用程序,希望在用户登录时自动启动。有几个答案可以做到这一点,特别是我正在使用此GitHub存储库 中的代码,并且它运行良好。
现在,我想做的是,在启动应用程序时不显示主窗口。仅当应用程序在登录时启动时才会这样,如果应用程序关闭并且用户通过点击Dock(或其他方式)打开它,则希望显示窗口。
这种情况是否可行?有何想法如何实现?
在“账户”系统首选项中,您可以设置在登录时启动的应用程序,并且有一个“隐藏”选项,可以按照我所需进行操作,但我想以编程方式实现这一点。
1个回答

10

好的,我找到了如何做...这个Open Radar bug报告帮了我大忙,我之前使用了错误的属性。

以下是代码:

- (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函数。


嗨,马可斯,我在我的Mac OS X应用程序上遇到了相同的问题。我尝试了你的代码,在我安装了我的应用程序之后,它在“用户与组”->“登录项”中将其设置为隐藏(勾选启用)。但是,当我重新启动我的机器时,它会自动打开我的应用程序窗口,而我想要隐藏UIWindow而不是自动显示。你能否请给我一些建议来确切地解决这个问题? - Getsy
谢谢您的回答,但我如何知道应用程序是自动启动还是由用户独立启动,而不管是否显示主窗口?谢谢!! - toto_tata
@marcos-crispino,您能否发布一下代码,以便检查应用程序是在登录时打开还是手动打开? - ck_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接