次のコードがあります。
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 がカーソルの下にあることはトリガーされません。ただし、デスクトップをクリックすると、正しく識別されます。私が見逃している可能性のあるアイデアはありますか?