我想知道哪些窗口在屏幕上可见。 CGWindowListCopyWindowInfo为我提供了窗口列表,除了它还列出了最小化的窗口之外,它很棒。 我尝试使用kCGWindowIsOnscreen来检测隐藏/最小化的窗口,但它总是为所有窗口赋予TRUE。有什么方法可以以某种方式检测出来吗?
- (void) checkWindows {
NSMutableArray *windows = (__bridge NSMutableArray *)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
for (NSDictionary *window in windows) {
NSString *owner = [window objectForKey:@"kCGWindowOwnerName" ];
NSString *name = [window objectForKey:@"kCGWindowName" ];
CFBooleanRef visibleBR = (CFBooleanRef)[window objectForKey:@"kCGWindowIsOnscreen"];
bool visible = CFBooleanGetValue(visibleBR);
NSLog(@"%@,%@,Visible:%@",owner,name,visible?@"YES":@"NO");
}
}
更新:很奇怪,这只是微软的一句话。实际上它不必被隐藏,Word创建一个全屏窗口,该窗口不可见但列在可见窗口中。
答案 0 :(得分:0)
问题是由MS Word引起的。 它创建一个全屏窗口,该窗口不可见,但列在可见窗口中。 CGWindowListCopyWindowInfo正确列出可见/最小化窗口。