gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:10:20 24 4
gpt4 key购买 nike

我想将外部应用程序(例如 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 desiredFrontWindow
AXUIElementSetAttributeValue(textEditApp, kAXFocusedUIElementAttribute, desiredFrontWindow);

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

谢谢。

最佳答案

But why doesn't this line of code bring the specified window to the front?

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

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

最前面窗口的 Cocoa/Mac OS X 名称是“主窗口”。 (例如,请参阅与该概念相关的 NSApplication'sNSWindow's methods。)辅助功能使用相同的名称,因此要使单个窗口位于最前面,请将其 kAXMainAttribute 的值设置为 kCFBooleanTrue.

使应用程序位于最前面的方法类似:将其kAXFrontmostAttribute 的值设置为kCFBooleanTrue。您需要执行这两项操作才能设置应用程序最前面的窗口并使应用程序处于事件状态。

据我所知,没有办法仅将应用程序的单个窗口置于最前面并为其提供 session 焦点。

关于cocoa - 使用辅助功能 API 设置最前面的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com