objective-c - 获取上一个最前面的应用程序

标签 objective-c cocoa swift

好吧,我被难住了。我正在编写一个小实用程序,它需要在程序启动之前知道最前面的应用程序是什么。我试过这个:

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/

相关文章:

cocoa - NSArray 到核心数据项

swift - 如何自定义 iOS 图表中的数据点标签?

ios - swift xcode : Changing the name/title of a row/cell inside a Table by a text input after pressing a button

iphone - 在 iPhone 上发送 UDP 数据包在新的 3G 连接上失败,但在其他情况下有效

ios - NSURLSession 和代表

objective-c - 如何禁用点击进入另一个 NSView 后面的 NSView

swift - mac os x 嵌入式 webkit webview 中的离线应用程序缓存支持

objective-c - 删除第一个正斜杠之前的字符串部分

objective-c - 反序列化JSON后如何区分 bool 值和整数?

ios - 如何在不使用 xcode 的情况下创建类似 .xcappdata 的内容?