需要获取MAC上用户可见的当前运行的应用程序列表

时间:2013-07-18 14:57:06

标签: macos window nsworkspace

我正在开发MAC,需要获取当前正在运行的所有活动应用程序的列表,我的意思是具有实际窗口的用户可以查看/关闭/最小化/最大化。

我尝试使用NSWorkspace runningApplications函数,但它提供了很长的应用程序列表(很可能它还列出了一些隐藏的应用程序)但我只需要那些具有窗口UI的应用程序。

我还使用了以下帖子中的建议来获取Dock下方的窗口,如果Dock可见,它可以正常工作: CGWindowListCreate generates a hugely long list of windows

但是当隐藏Dock时,此解决方案不起作用。

有没有人知道如何在MAC上获取用户可见的正在运行的应用程序列表?

2 个答案:

答案 0 :(得分:1)

它可能对你有所帮助。试试这个

for (NSRunningApplication *app in [[NSWorkspace sharedWorkspace] runningApplications]) {
        NSLog(@"%@",[app localizedName]);
    }

答案 1 :(得分:0)

#import <Foundation/Foundation.h>

void ListWindows()
{
    NSMutableArray* windows = 
         (__bridge NSMutableArray *)CGWindowListCopyWindowInfo(
                                         kCGWindowListOptionOnScreenOnly | 
                                         kCGWindowListExcludeDesktopElements, 
                                         kCGNullWindowID);

    for (NSDictionary* window in windows) {
        if([[window objectForKey:@"kCGWindowLayer" ] intValue] == 0)
        {
        NSLog(@"%@", [window objectForKey:@"kCGWindowOwnerName"]);
        }
    }

}

int main(int argc, const char * argv[])
{
  NSLog(@"Active windows:");
  ListWindows();
  return 0;
}

示例输出:

Active windows: 
Xcode 
TextEdit 
Finder