我想從Swift應用程序中知道用戶從一個應用程序更改爲另一個應用程序時的情況。在OS X上監視應用程序切換
例如:從Google Chrome切換到其他應用(如Xcode)會觸發此事件。
有沒有什麼辦法來提取應用程序切換事件,比如通過事件監視器呢?
我想從Swift應用程序中知道用戶從一個應用程序更改爲另一個應用程序時的情況。在OS X上監視應用程序切換
例如:從Google Chrome切換到其他應用(如Xcode)會觸發此事件。
有沒有什麼辦法來提取應用程序切換事件,比如通過事件監視器呢?
您可以在NSWorkspace.sharedWorkspace().notificationCenter
上添加觀察者,觀察NSWorkspaceDidActivateApplicationNotification
密鑰。您將選擇器指向您的某個方法,並從userInfo
字典中獲取信息。在AppDelegate中
簡單的例子:
雨燕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)
}
}
在斯威夫特3,您需要使用關鍵字let
每個可選綁定。另外,正在從userInfo字典中提取的正在運行的應用程序的類型爲any
,並且需要進一步轉換爲NSRunningApplication
類型。
所以由Eric綾給雨燕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)
}
}
(我早就離開這個職位作爲公認的答案評論,但沒有足夠的代表...)
非常感謝! –
不客氣。 :) – Moritz