OSX:如何从CGWindowListCopyWindowInfo中过滤掉菜单栏

时间:2013-01-11 00:22:08

标签: macos core-graphics

我正在使用CGWindowListCopyWindowInfo来获取桌面上的窗口列表。我想使用Window List keys的值过滤掉只有可见的窗口。我遇到问题的一个窗口是OSX菜单栏。我想到的一个解决方案是查看窗口边界的X和Y.没有可见的窗口似乎都有两个等于0,但我不确定这种方法有多可靠。

另一种方法是将PID编号与OSX Window Server的编号进行比较,但我不知道如何获得。有人能指出我正确的API或知道过滤菜单栏的可靠方法吗?

编辑:我和下面的kondy有相同的代码以及以下添加内容,因为listOptions本身不够好:


CGRect windowBounds;
CGRectMakeWithDictionaryRepresentation((CFDictionaryRef) [windowInfo objectForKey:(id)kCGWindowBounds], &windowBounds);

if (!(windowBounds.origin.x == 0 && windowBounds.origin.y == 0))
{
    // Work with windows that aren't the Menubar
}

1 个答案:

答案 0 :(得分:2)

我找到了过滤掉“Window Server”的答案:

CGWindowListOption listOptions = kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements;
CFArrayRef windowList = CGWindowListCopyWindowInfo(listOptions, kCGNullWindowID);

使用这些ORed选项,我得到的结果与“活动管理器”中mac的“窗口化进程”相同

我希望它会对你有所帮助!