2012-09-17 50 views
1

好吧,这个标题看起来可能很奇怪,但请耐心等待。我有一个应用程序,可以根据用户的偏好进行设置,以便在登录时启动。这意味着我可以预计,有时应用程序将由用户启动(点击Dock/Finder等),但有时候,系统会在登录时自动启动应用程序。知道用户是否启动了应用程序

我想显示一个窗口,当用户启动应用程序时,而不是当它自动启动(因为我想这将是一个用户的痛苦)。我怎样才能做到这一点?

回答

1

虽然它可能取决于您打算如何自动启动应用程序,但您可以使用命令行参数来区分系统启动与用户启动。

因此,这个命令行启动可能会喜欢这样的:

MyApp -autoLaunch "Y" 

要在Cocoa程序解析命令行参数,你可以使用NSUserDefaults(是的,you can!):

if(![[NSUserDefaults standardUserDefaults] objectForKey:@"autoLaunch"] isEqualToString:"Y"]) { 
    // do something for user initiated launch 
} 
+0

如何使用'[[NSWorkspace sharedWorkspace] launchApplication:@“MyApp”showIcon:NO autolaunch:YES]'?据我所知,这将一个特定的用户默认密钥设置为YES。问题是我找不到关于该密钥名称的任何文档。可能@“自动启动”?哦,还有什么想法showIcon:'做什么? – Alex

+0

@NSBum:感谢您的回答,但您如何添加此“Y”参数?在我的情况下,我使用LSSharedFileListRef,如http://stackoverflow.com/questions/815063/how-do-you-make-your-app-open-at-login在会话登录时启动应用程序。如何设置和获取这个“Y”参数? –

+0

不确定。 'LSSharedFileListInsertItemURL'似乎没有这个参数。它确实需要一个'CFDictionaryRef inPropertiesToSet',但关于该参数的头文件没有多少内容。 – FluffulousChimp

0

我没有针对您的问题的确切答案。但是,如果在用户上次退出应用程序时窗口可见,我可以建议您的应用程序应该显示窗口吗?

这可能更符合Mac用户界面指南有关恢复应用程序和窗口的建议,并且符合用户的期望。

另外,将您的应用设置为在登录时启动的用户可能会理解为关闭该窗口,并且下次不会恢复该窗口,或者使系统在登录时也隐藏您的应用。

+0

虽然你提出的建议对于具有“普通”窗口的应用程序来说是有意义的,但我想要显示的窗口基于菜单栏,“附加”到NSStatusItem,因此不属于“正常”类别。当用户打开应用程序时自动显示该窗口是有意义的,因为如果用户故意打开应用程序,那意味着他现在想要对其执行操作。自动显示窗口可作为用户操作的快捷方式。但是,当应用程序自动启动时,该应用程序不适用,并且对于用户每次登录时都必须关闭窗口而言是一种痛苦。 – Alex

相关问题