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

时间:2021-04-22 06:06:11

标签: objective-c macos cocoa

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

我只知道如何使用

检测其他窗口的调整大小或最小化 <块引用>

AXObserverAddNotification(observer,application,kAXWindowMiniaturizedNotification, nil);

<块引用>

AXObserverAddNotification(observer, application, kAXWindowResizedNotification, nil);

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

1 个答案:

答案 0 :(得分:0)

通知是 kAXUIElementDestroyedNotification,但它也发送给其他元素。如果元素是窗口,则观察窗口或检查回调。

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);
    }
}