窗口可调整大小 - kAXGrowAreaAttribute 始终返回 NULL

发布于 2024-12-18 11:35:25 字数 852 浏览 1 评论 0原文

在我的应用程序中,我想检查其他应用程序的窗口是否可以调整大小。

我正在使用辅助功能 API 来测试窗口是否具有 kAXGrowAreaAttribute 属性(如果 NULL 不可调整大小),正如 Peter Hosey 在 这个问题

问题是 kAXGrowAreaAttribute 返回的值始终为 NULL,无论窗口大小是否可调整都无关紧要。注意:要检索值,我正在使用 Apple UIElementInspector 示例(我也尝试直接使用 AXUIElementCopyAttributeValue 获得相同的结果)。

有什么想法吗?我在 Lion 工作,这可能是问题所在吗?提前致谢。

编辑:

使用 UIElementUtilities 类方法我找到了一个解决方案。

只需将方法

+ (BOOL)canSetAttribute:(NSString *)attributeName ofUIElement:(AXUIElementRef)element

与 kAXSizeAttribute 和聚焦窗口结合使用即可。它返回 YES 或 NO 取决于窗口是否足够大......

In my app I want to check if windows from others apps are resizable.

I´m using the accessibility API to test if the window has the kAXGrowAreaAttribute attribute (if NULL is not resizable) as Peter Hosey answered in this question.

The problem is that the kAXGrowAreaAttribute returned value is always NULL it doesn´t matter if the window is resizable or not. Note: to retrieve the value I´m using the UIElementUtilities class from the Apple UIElementInspector example (I also have tried using AXUIElementCopyAttributeValue directly with the same result).

Any idea? I´m working in Lion, could be this the problem? Thanks in advance.

EDITED:

Playing around with the UIElementUtilities class methods I found a solution.

Just use the method

+ (BOOL)canSetAttribute:(NSString *)attributeName ofUIElement:(AXUIElementRef)element

with the kAXSizeAttribute and the focused window. It returns YES or NO depending if the window is sizable or not...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南街女流氓 2024-12-25 11:35:25

这可能是因为你在 Lion 中。尺寸盒被杀死;可调整大小的窗口现在可以在每个边缘调整大小。

是的,测试尺寸是否可以改变可能是正确的方法。它似乎对我在雪豹中有用。

It probably is because you're in Lion. The size box was killed off; resizable windows are resizable at every edge now.

And yes, testing whether the size can be changed is probably the right way. It seems to work for me in Snow Leopard.

时间海 2024-12-25 11:35:25

Swift 5 版本

func isResizable(axElement: AXUIElement) -> Bool {
    var resizable: DarwinBoolean = true
    let status = AXUIElementIsAttributeSettable(axElement, kAXSizeAttribute as CFString, &resizable)

    if status != .success {
        print("unable to determine if window is resizable")
    }
    return resizable.boolValue
}

Swift 5 version:

func isResizable(axElement: AXUIElement) -> Bool {
    var resizable: DarwinBoolean = true
    let status = AXUIElementIsAttributeSettable(axElement, kAXSizeAttribute as CFString, &resizable)

    if status != .success {
        print("unable to determine if window is resizable")
    }
    return resizable.boolValue
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文