3

次のコードがあります。

id eventHandler = [NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent * event) {
    CGWindowID windowID = (CGWindowID)[event windowNumber];
    CFArrayRef a = CFArrayCreate(NULL, (void *)&windowID, 1, NULL);
    NSArray *windowInfos = (__bridge NSArray *)CGWindowListCreateDescriptionFromArray(a);
    CFRelease(a);
    if ([windowInfos count] > 0) {
        NSDictionary *windowInfo = [windowInfos objectAtIndex:0];
        NSLog(@"Name:  %@", [windowInfo objectForKey:(NSString *)kCGWindowName]);
        NSLog(@"Owner: %@", [windowInfo objectForKey:(NSString *)kCGWindowOwnerName]);
        //etc.
    }
}];

これは、カーソルの下にあるウィンドウを識別するのに非常に適しています。ただし、それらを確実に識別するには、ウィンドウをクリックする必要があります。一部のウィンドウは、ターミナルや xcode などの変更をトリガーしますが、デスクトップにカーソルを合わせても、Finder がカーソルの下にあることはトリガーされません。ただし、デスクトップをクリックすると、正しく識別されます。私が見逃している可能性のあるアイデアはありますか?

4

0 に答える 0