2012-09-17 55 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

相關問題