画面に表示されているウィンドウを知りたいのですが。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は、表示されていないが表示されているウィンドウの中にリストされているフルスクリーンウィンドウを作成します。