好吧,我被难住了。我正在编写一个小实用程序,它需要在程序启动之前知道最前面的应用程序是什么。我试过这个:
var thePreviousApp:NSRunningApplication = NSWorkspace.sharedWorkspace().frontmostApplication
override func awakeFromNib()
{
thePreviousApp = NSWorkspace.sharedWorkspace().frontmostApplication
}
当我从 Xcode 运行时它可以工作(即将 PreviousApp 设置为“Xcode”),但是当我从 Finder 或 Launchpad 运行二进制文件时,它返回我的程序的名称,而不是我的程序启动之前最前面的程序。
就其值(value)而言,我可以通过将其放入 AppDelegate 来获取以前的应用程序:
var thePreviousApp:NSRunningApplication = NSWorkspace.sharedWorkspace().frontmostApplication
func applicationDidResignActive(notification: NSNotification!)
{
thePreviousApp = NSWorkspace.sharedWorkspace().frontmostApplication
}
如果我启动程序,然后点击命令选项卡激活上一个程序,然后再次点击命令选项卡激活我的程序,则PreviousApp是正确的应用程序。
我还尝试获取 NSWorkspace 的 runningApplications 数组,然后迭代它们以检查哪个程序是“事件的”。再说一次,没有骰子。同样的问题。
如有任何建议,我们将不胜感激。
谢谢, 汤姆
最佳答案
对于那些想知道的人,这就是我最终所做的。我在 AppDelegate 中创建了一个名为 thePreviousApp 的属性。然后创建了一个观察者对象:
import Foundation
import Cocoa
class theObserver: NSObject
{
override init() {
super.init()
NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "setPreviousApplication:", name: NSWorkspaceDidDeactivateApplicationNotification, object: nil)
}
func setPreviousApplication(notification: NSNotification!)
{
let theAppDelegate:AppDelegate=NSApplication.sharedApplication().delegate as AppDelegate
theAppDelegate.thePreviousApp = notification.userInfo[NSWorkspaceApplicationKey] as NSRunningApplication
}
}
该对象在 AppDelegate 中实例化。
感谢 MrAsterico 的帮助。
汤姆
关于objective-c - 获取上一个最前面的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720530/