1

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

4

1 に答える 1

0

この問題はMSWordが原因で発生しました。表示されていないが、表示されているウィンドウの中にリストされているフルスクリーンウィンドウを作成します。CGWindowListCopyWindowInfoは、表示/最小化されたウィンドウを正しくリストします。

于 2012-04-22T01:14:11.300 に答える