我正在使用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
}
答案 0 :(得分:2)
我找到了过滤掉“Window Server”的答案:
CGWindowListOption listOptions = kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements;
CFArrayRef windowList = CGWindowListCopyWindowInfo(listOptions, kCGNullWindowID);
使用这些ORed选项,我得到的结果与“活动管理器”中mac的“窗口化进程”相同
我希望它会对你有所帮助!