我的应用程序如何检测另一个应用程序的 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);
}
}
在 Mac 上的 Cocoa 中,我想检测属于另一个应用程序的 window 何时关闭。我该怎么做?
我只知道如何使用
检测其他window的调整大小或最小化AXObserverAddNotification(observer,application,kAXWindowMiniaturizedNotification, nil);
AXObserverAddNotification(observer, application, kAXWindowResizedNotification, nil);
但我没有找到像 kAXWindowClosedNotification
这样的通知。
通知是 kAXUIElementDestroyedNotification
,但它也会针对其他元素发送。如果元素是 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);
}
}