CGWindowLevel.h
文件定义用于设置窗口级别的常量,以及可用作窗口级别为20的最大值。但是,如果使用调用{{1}检索窗口列表},你可以观察到CGWindowListCopyWindowInfo
的值超过20(25,103等)。
kCGWindowLayer和窗口级别不一样吗?
如果它们不相同,我如何获得使用kCGWindowLayer
获得的窗口的窗口级别?
如果它们相同,为什么我们得到的值> 20?
答案 0 :(得分:4)
kCGWindowLayer
似乎确实引用了一个窗口级别,但我还没有找到任何文档说明这一点。
您似乎认为窗口级别最多为20,因为从kCGBaseWindowLevelKey
到kCGAssistiveTechHighWindowLevelKey
的枚举,最后一个具有值20.但这些不是窗口级别,它们是键可以使用CGWindowLevelForKey
查找窗口级别。例如,kCGStatusWindowLevelKey
的值为9,但kCGStatusWindowLevel
的定义为CGWindowLevelForKey(kCGStatusWindowLevelKey)
,其值为25。
答案 1 :(得分:0)
没有。 kCGWindowLayer和窗口级别不相同。你无法直接获得窗口级别。但你可以做如下的技巧。
CFArrayRef windowArray = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSMutableArray *windowsInMap = [NSMutableArray arrayWithCapacity:64];
NSArray* windows = (NSArray*)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSUInteger count = [windows count];
for (NSUInteger i = 0; i < count; i++)
{
NSDictionary* nswindowsdescription = [windows objectAtIndex:i];
NSNumber* windowid = (NSNumber*)[nswindowsdescription objectForKey:@"kCGWindowNumber"];
if(windowid)
{
// Entried will be in front to back order.
}
}
CFRelease(windowArray);