cocoa – 使用辅助功能API设置最前面的窗口

cocoa – 使用辅助功能API设置最前面的窗口,第1张

概述我想设置一个窗口,从外部应用程序(例如textedit),到最前面. 我可以使用GetFrontProcess成功获取对应用程序本身的引用,并检查它是否是最前面的.如果不是,我可以使用setFrontProcess使其聚焦. 然后,我可以使用辅助功能API来检查该应用程序下的所有窗口.我正在检查某个窗口是否存在,如果存在,我将它与应用程序的最前面窗口进行比较: //get the front wi 我想设置一个窗口,从外部应用程序(例如textedit),到最前面.

我可以使用GetFrontProcess成功获取对应用程序本身的引用,并检查它是否是最前面的.如果不是,我可以使用setFrontProcess使其聚焦.

然后,我可以使用辅助功能API来检查该应用程序下的所有窗口.我正在检查某个窗口是否存在,如果存在,我将它与应用程序的最前面窗口进行比较:

//get the front window of textEditApp and store it in 'currentFrontwindow'    AXUIElementcopyAttributeValue(textEditApp,kAXFocuseDWindowAttribute,(CFTypeRef *)&currentFrontwindow);

如果我感兴趣的窗口不是最前面的,我需要设置它.我认为我可以使用AXUIElement Set AttributeValue来做到这一点,但我没有取得任何成功.以下是我尝试过的方法.

//set the front window of textEditApp to be desiredFrontwindowAXUIElementSetAttributeValue(textEditApp,kAXFocusedUIElementAttribute,desiredFrontwindow);

我已检查窗口是否存在,并且应用程序已成功“切换到”.但为什么这行代码没有将指定的窗口带到前面?

谢谢.

解决方法

But why doesn’t this line of code bring the specifIEd window to the front?

因为您尝试设置只读属性.

为了使窗口最前面,您需要设置窗口的相应属性.应用程序也是如此:要使应用程序位于最前端,您需要设置应用程序的相应属性.

最前面窗口的Cocoa / Mac OS X名称是“主窗口”. (例如,参见与该概念相关的NSApplication’s和NSWindow’s methods.)可访问性使用相同的名称,因此要使单个窗口位于最前面,请将其kAXMainAttribute的值设置为kcfBooleanTrue.

使应用程序最前端的方法类似:将其kAXFrontmostAttribute的值设置为kcfBooleanTrue.您需要同时执行这两项 *** 作以设置应用程序的最前面的窗口并使应用程序处于活动状态.

据我所知,没有办法只将应用程序的一个窗口放在最前面并给它关注会话.

总结

以上是内存溢出为你收集整理的cocoa – 使用辅助功能API设置最前面的窗口全部内容,希望文章能够帮你解决cocoa – 使用辅助功能API设置最前面的窗口所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1011564.html

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

发表评论

登录后才能评论

评论列表(0条)

保存