【问题标题】:How to get list of all applications currently running and visible in Dock for Mac OS X programming?如何获取当前在 Dock for Mac OS X 编程中运行和可见的所有应用程序的列表?
【发布时间】:2013-11-18 18:06:33
【问题描述】:

我需要知道哪些应用程序正在运行并且有一个活动窗口。 'command + tab' 热键切换器中必须有类似的东西。

当我运行这样的代码时:

NSWorkspace * ws = [NSWorkspace sharedWorkspace];
NSArray * apps = [ws runningApplications];
NSLog (@"%@", apps);

我在我的日志中得到了这个:

"<NSRunningApplication: 0x6080001052b0 (com.apple.loginwindow - 66)>",
"<NSRunningApplication: 0x608000105340 (com.apple.systemuiserver - 285)>",
"<NSRunningApplication: 0x6080001053d0 (com.apple.dock - 284)>",
"<NSRunningApplication: 0x608000105460 (com.apple.finder - 286)>",
"<NSRunningApplication: 0x6080001054f0 (com.apple.iTunesHelper - 339)>",
"<NSRunningApplication: 0x608000105580 (cc.omh.Clyppan - 340)>",
"<NSRunningApplication: 0x608000105610 (ws.agile.1PasswordAgent - 333)>",
"<NSRunningApplication: 0x6080001056a0 (com.irradiatedsoftware.Cinch-Direct - 342)>",
"<NSRunningApplication: 0x608000105730 (com.leapmotion.Leap-Motion - 343)>",
"<NSRunningApplication: 0x6080001057c0 (com.apple.notificationcenterui - 316)>",
"<NSRunningApplication: 0x608000105850 (com.smileonmymac.textexpander - 348)>",
"<NSRunningApplication: 0x6080001058e0 (com.lightheadsw.caffeine - 350)>",
"<NSRunningApplication: 0x608000105970 (2BUA8C4S2C.com.agilebits.onepassword4-helper - 309)>"

它显示了所有正在运行的应用程序。我只想要 Dock 中正在运行且可见的应用程序。

【问题讨论】:

  • 这是一个很好的问题。

标签: macos cocoa


【解决方案1】:

[NSWorkspace runningApplications] 返回的数组成员的类型为NSRunningApplication。您想挑选出activationPolicy 属性类型为NSApplicationActivationPolicyRegular 的那些。

【讨论】:

    【解决方案2】:

    为 Swift 3 更新

        let ws = NSWorkspace.shared()
        let apps = ws.runningApplications
        for currentApp in apps
        {
            if(currentApp.activationPolicy == .regular){
                print(currentApp.localizedName!)
            }
        }
    

    【讨论】:

      【解决方案3】:

      以下代码使用NSWorkplace workspace.runningApplications.filter 调用来提取应用程序。

      // Swift 4.1
      //: Playground - noun: a place where people can play
      
      import Cocoa
      
      let workspace = NSWorkspace.shared
      let apps = workspace.runningApplications.filter{  $0.activationPolicy == .regular }
      

      【讨论】:

      • 这太简单易读了:-)
      【解决方案4】:

      要访问所有正在运行的应用程序的列表,请使用NSWorkspace 中的runningApplications 方法。

      【讨论】:

        【解决方案5】:

        我让它在这里工作。感谢您的帮助!

        NSWorkspace * ws = [NSWorkspace sharedWorkspace];
        NSArray * apps = [ws runningApplications];
        
        NSUInteger count = [apps count];
        for (NSUInteger i = 0; i < count; i++) {
            NSRunningApplication *app = [apps objectAtIndex: i];
            //NSLog (@"%@", app.bundleIdentifier );
        
            if(app.activationPolicy == NSApplicationActivationPolicyRegular) {
               //NSLog(@"0"); These are the ones we want.
            }
        }
        

        【讨论】:

        • NSApplicationActivationPolicyRegular 的值恰好是 0,但是当你的意思是 NSApplicationActivationPolicyRegular 时写 0 是一种不好的编程习惯。
        【解决方案6】:

        在斯威夫特。编写下面的代码,您将获得所有正在运行的应用程序名称。

        let ws = NSWorkspace.sharedWorkspace()
        
        let apps = ws.runningApplications
        
        for currentApp in apps.enumerate(){        
            let runningApp = apps[currentApp.index]
        
            if(runningApp.activationPolicy == .Regular){
                print(runningApp.localizedName)        
            }
        }
        

        【讨论】:

        • 对 Swift 3 的更改:对于 apps.enumerated() 中的 currentApp { let runningApp = apps[currentApp.offset]; if(runningApp.activationPolicy == .regular) { print(runningApp.localizedName); } }
        • 它只返回正在运行的应用程序,如果我想要其他在停靠栏中可见但未运行(活动)的应用程序怎么办
        【解决方案7】:

        已针对最佳 Swift 3 进行了更新

        let workspace = NSWorkspace()

        let apps = workspace.runningApplications.filter{$0.activationPolicy == NSApplicationActivationPolicy.regular}

        apps 数组将包含当前正在运行并在屏幕上显示的每个应用程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多