我可以使用GetFrontProcess成功获取对应用程序本身的引用,并检查它是否是最前面的.如果不是,我可以使用setFrontProcess使其聚焦.
然后,我可以使用辅助功能API来检查该应用程序下的所有窗口.我正在检查某个窗口是否存在,如果存在,我将它与应用程序的最前面窗口进行比较:
//get the front window of textEditApp and store it in 'currentFrontwindow' AXUIElementcopyAttributeValue(textEditApp,kAXFocuseDWindowAttribute,(CFTypeRef *)¤tFrontwindow);
如果我感兴趣的窗口不是最前面的,我需要设置它.我认为我可以使用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设置最前面的窗口所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)