2016-07-16 9 views
5

Swiftアプリケーションの中から、あるアプリケーションから別のアプリケーションに変更する際に、一般的に知りたいことがあります。OSの切り替え監視アプリケーション

たとえば、Google ChromeからXcodeなどの別のアプリケーションに切り替えると、このイベントが発生します。

アプリケーション切り替えイベントを取得する方法はありますか?たとえば、イベントモニターなどですか?

答えて

6

NSWorkspaceDidActivateApplicationNotificationのキーを見ると、オブザーバをNSWorkspace.sharedWorkspace().notificationCenterに追加できます。セレクタをあなたのメソッドの1つに向け、userInfo辞書から情報を取得します。 AppDelegateで

簡単な例:スウィフト3では

スウィフト2.2

func applicationDidFinishLaunching(notification: NSNotification) { 
    NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, 
                 selector: #selector(activated), 
                 name: NSWorkspaceDidActivateApplicationNotification, 
                 object: nil) 
} 

func activated(notification: NSNotification) { 
    if let info = notification.userInfo, 
     app = info[NSWorkspaceApplicationKey], 
     name = app.localizedName { 
      print(name) 
    } 
} 

スウィフト3

func applicationDidFinishLaunching(_ aNotification: Notification) { 
    NSWorkspace.shared().notificationCenter.addObserver(self, 
                 selector: #selector(activated(_:)), 
                 name: NSNotification.Name.NSWorkspaceDidActivateApplication, 
                 object: nil) 
} 

func activated(_ notification: NSNotification) { 
    if let info = notification.userInfo, 
     let app = info[NSWorkspaceApplicationKey] as? NSRunningApplication, 
     let name = app.localizedName 
    { 
     print(name) 
    } 
} 
+0

ありがとうございました! –

+0

ようこそ。 :) – Moritz

4

あなたは、各オプションの結合のためのキーワードletを使用する必要があります。また、実行中のアプリケーションは、userInfo辞書から抽出されたように、タイプがanyであり、さらにNSRunningApplicationタイプにキャストする必要があります。

だから、エリック綾で与えスウィフト3の答えは動作しますが、小さな変更を必要とします:

func applicationDidFinishLaunching(_ aNotification: Notification) { 
    NSWorkspace.shared().notificationCenter.addObserver(self, 
                 selector: #selector(activated), 
                 name: NSNotification.Name.NSWorkspaceDidActivateApplication, 
                 object: nil) 
} 

func activated(notification: NSNotification) { 
    if let info = notification.userInfo, 
     let app = info[NSWorkspaceApplicationKey] as? NSRunningApplication, 
     let name = app.localizedName { 
      print(name) 
    } 
} 

(私は受け入れ答えにコメントとしてこのポストを左ではなく、十分な担当者だろう...)

+0

Swiftには非常に多くの変更が頻繁にあります。私の回答を更新し続けるのは難しいです。 :) ご協力ありがとうございます。 – Moritz

+0

はい、わかっています! :)それは簡単な修正でしたが、他の人に時間を節約できると思いました。元の回答をいただきありがとうございました。とても役に立ちました! – tin

関連する問題