1

表示されているすべてのウィンドウのフレームを取得する方法を見つけようとしています。次のコードを試しましたが、アプリ自体でしか機能しません 他のウィンドウ レポート {0,0,0,0}

   NSArray *windowArray =  [NSWindow windowNumbersWithOptions:NSWindowNumberListAllApplications | NSWindowNumberListAllSpaces];
for(NSNumber *number in windowArray){
    NSLog(@"Window number: %@", number);
    NSWindow *window = [[NSApplication sharedApplication] windowWithWindowNumber:[number intValue]];
    NSLog(@"Window: %@", NSStringFromRect( [[window contentView] frame]));
}

サンプルコードは大歓迎です。

4

2 に答える 2

4

私はそれを考え出した:

    NSMutableArray *windows = (__bridge NSMutableArray *)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);

for (NSDictionary *window in windows) {
    NSString *name = [window objectForKey:@"kCGWindowName" ];
    CGRect bounds;
    CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[window objectForKey:@"kCGWindowBounds"], &bounds);
    NSLog(@"%@: %@",name,NSStringFromRect(bounds));            
}
于 2012-04-18T12:14:57.393 に答える
1

NSWindow別のアプリケーションのウィンドウの を作成することはできません。通常、他のアプリケーションのオブジェクトには、スクリプトなどの連携するインターフェイスを介して以外はアクセスできません。

Quartz Window Services (別名 CGWindowList) APIを使用して、探しているものを取得できます。

Cocoa によって返されるウィンドウ番号が、その API によって使用されるウィンドウ番号と同じであるかどうかは、まったくわかりません。-[NSWindow windowNumber]実際、 「これはウィンドウサーバーによって割り当てられたグローバルウィンドウ番号と同じではないことに注意してください」と具体的に言うためのドキュメント。+[NSWindow windowNumbersWithOptions:]アプリケーションのウィンドウ用ではない、によって返されたウィンドウ番号をどのような用途に使用できるかは確かです。

于 2012-04-18T10:37:13.667 に答える