我如何使用Cocoa的Accessibility API来检测窗口是否被带到前面?

我如何使用Cocoa的Accessibility API来检测窗口是否被带到前面?,第1张

概述我正在使用辅助功能API来检测某个应用程序何时打开窗口,关闭窗口,何时移动窗口或调整窗口大小,或者进行主要和/或聚焦.但是,客户端应用程序似乎在没有Accessibility API通知的情况下将窗口移到前面 被解雇. 我的应用程序如何检测另一个应用程序何时将窗口置于前面而不使其成为关键? 我希望找到适用于OS X 10.4和10.5的解决方案 更多信息: 我现在正在使用这些陈述.当用户手动选择窗 我正在使用辅助功能API来检测某个应用程序何时打开窗口,关闭窗口,何时移动窗口或调整窗口大小,或者进行主要和/或聚焦.但是,客户端应用程序似乎在没有Accessibility API通知的情况下将窗口移到前面
被解雇.

我的应用程序如何检测另一个应用程序何时将窗口置于前面而不使其成为关键?

我希望找到适用于OS X 10.4和10.5的解决方案

更多信息:
我现在正在使用这些陈述.当用户手动选择窗口将其置于前面时,它们可以正常工作.但是,当应用程序本身将窗口移到前面时,它确实无法工作.

AXObserverAddNotification(observer,element,kAXMainWindowChangednotification,0);AXObserverAddNotification(observer,kAXFocuseDWindowChangednotification,0);
解决方法 我一直无法订阅当前的窗口更改,但您可以询问当前应用程序的可访问性API以及当前应用程序的最前景窗口.

想象一下,您有一个名为CurrentAppData的类,其中包含以下数据:

@interface CurrentAppData : NSObject {    Nsstring* _@R_419_5979@;    AXUIElementRef _systemWIDe;    AXUIElementRef _app;    AXUIElementRef _window;}

查找当前应用程序的代码如下所示:

-(voID) updateCurrentApplication {   // get the currently active application     _app = (AXUIElementRef)[CurrentAppData                           valueOfExistingAttribute:kAXFocusedApplicationAttribute                                         ofUIElement:_systemWIDe];   // Get the window that has focus for this application   _window = (AXUIElementRef)[CurrentAppData                               valueOfExistingAttribute:kAXFocuseDWindowAttribute                                            ofUIElement:_app];   Nsstring* appname = [CurrentAppData descriptionOfValue:_window                                             beingVerbose:TRUE];       [self set@R_419_5979@:appname];}

在此示例中,_systemWIDe变量在类init函数中初始化为:
    _system = AXUIElementCreateSystemWIDe();

类函数valueOfExistingAttribute如下所示:

// -------------------------------------------------------------------------------//  valueOfExistingAttribute:attribute:element////  Given a uIElement and its attribute,return the value of an accessibility//  object's attribute.// -------------------------------------------------------------------------------+ (ID)valueOfExistingAttribute:(CFStringRef)attribute ofUIElement:(AXUIElementRef)element{    ID result = nil;    NSArray *attrnames;    if (AXUIElementcopyAttributenames(element,(CFArrayRef *)&attrnames) == kAXErrorSuccess)     {        if ( [attrnames indexOfObject:(Nsstring *)attribute] != NSNotFound                &&            AXUIElementcopyAttributeValue(element,attribute,(CFTypeRef *)&result) == kAXErrorSuccess        )         {            [result autorelease];        }        [attrnames release];    }    return result;}

之前的功能取自Apple UIElementInspector示例,该示例也是了解Accessibility API的绝佳资源.

总结

以上是内存溢出为你收集整理的我如何使用Cocoa的Accessibility API来检测窗口是否被带到前面?全部内容,希望文章能够帮你解决我如何使用Cocoa的Accessibility API来检测窗口是否被带到前面?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1035354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存