我的应用程序如何检测另一个应用程序的 window 是否已关闭?

How can my app detect whether another app's window is closed?

在 Mac 上的 Cocoa 中,我想检测属于另一个应用程序的 window 何时关闭。我该怎么做?

我只知道如何使用

检测其他window的调整大小或最小化

AXObserverAddNotification(observer,application,kAXWindowMiniaturizedNotification, nil);

AXObserverAddNotification(observer, application, kAXWindowResizedNotification, nil);

但我没有找到像 kAXWindowClosedNotification 这样的通知。

通知是 kAXUIElementDestroyedNotification,但它也会针对其他元素发送。如果元素是 window.

,请观察 window 或检查回调
if (CFStringCompare(notification, kAXUIElementDestroyedNotification, 0) == kCFCompareEqualTo) {
    CFTypeRef role;
    AXError error = AXUIElementCopyAttributeValue((AXUIElementRef)element, kAXRoleAttribute, &role);
    if (error == kAXErrorSuccess) {
        if (CFStringCompare(role, kAXWindowRole, 0) == kCFCompareEqualTo) {
            NSLog(@"Window is closed");
        }
        CFRelease(role);
    }
}