spd*_*spd 5 macos window layer quartz-graphics
该CGWindowLevel.h文件定义了用于设置窗口级别的常量,可以用作窗口级别的最大值为20。但是,如果使用调用检索窗口列表CGWindowListCopyWindowInfo,则可以观察到的值kCGWindowLayer大于20 (25、103 等)。
kCGWindowLayer 和窗口级别不一样吗?如果它们不相同,我如何获得使用 获得的窗口的窗口级别CGWindowListCopyWindowInfo?如果它们相同,为什么我们得到的值 >20?
似乎kCGWindowLayer确实指的是窗口级别,尽管我还没有找到任何文档说。
您似乎认为窗口级别最多可以为 20,因为从kCGBaseWindowLevelKeyto枚举kCGAssistiveTechHighWindowLevelKey,最后一个值为 20。但这些不是窗口级别,它们是可用于使用 查找窗口级别的键CGWindowLevelForKey。例如,kCGStatusWindowLevelKey具有值 9,但kCGStatusWindowLevel被定义为CGWindowLevelForKey(kCGStatusWindowLevelKey),结果它的值是 25。
不,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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3169 次 |
| 最近记录: |