【问题标题】:OS X Accessibility API Minimum WidthOS X 辅助功能 API 最小宽度
【发布时间】:2011-08-12 17:11:26
【问题描述】:

我发现另一个 question and answer 解释了如何使用 Accessibility API 获取窗口的宽度、高度和位置。有没有办法找到最小尺寸、最大尺寸、调整大小增量等?

编辑:

我目前的方法是使用AXUIElementCopyAttributeValue,但我不确定这是否可行。查看reference,您可以看到有很多我可以访问的属性,但我找不到任何关于窗口最小或最大尺寸的提及。请注意,似乎可以通过此 API 访问位置。

现在我还在查看一些名为 Son of Grab 的示例代码,它也能够访问窗口大小和位置,但我不相信该方法也适用于最小或最大尺寸。

【问题讨论】:

  • 你可能还想要宽高比。

标签: objective-c cocoa macos layout


【解决方案1】:

据我所知,没有简单的方法。我发现了一种非常粗略的方法来获取窗口的最大和最小尺寸。

它涉及将宽度和高度设置为一个非常大的数字,以查看窗口调整大小的距离,然后将此大小记住为最大值,然后将宽度和高度设置为一个较小的数字并再次执行相同操作。毕竟,我只是将宽度和高度重置为其原始值。

这样做的一个明显问题是,用户可以很容易地看到窗口已调整大小。

至于调整大小的增量,我(目前)想不出任何解决方法来获取该信息。

无论如何,这是我用来计算最大和最小尺寸的代码:

AXUIElementRef window; // The window

AXValueRef sizeValue = (AXValueRef)[UIElementUtilities valueOfAttribute:@"AXSize" ofUIElement:window];
CGSize windowSize;
AXValueGetValue(sizeValue, kAXValueCGSizeType, &windowSize);

CGFloat windowWidth = windowSize.width;
CGFloat windowHeight = windowSize.height;

// Set it to a very large number
[UIElementUtilities setStringValue:@"w=5000 h=5000" forAttribute:@"AXSize" ofUIElement:window];

AXValueRef maxSizeValue = (AXValueRef)[UIElementUtilities valueOfAttribute:@"AXSize" ofUIElement:window];
CGSize maxWindowSize;
AXValueGetValue(maxSizeValue, kAXValueCGSizeType, &maxWindowSize);

CGFloat maxWindowWidth = maxWindowSize.width;
CGFloat maxWindowHeight = maxWindowSize.height;

NSLog(@"max width = %f. max height = %f.", maxWindowWidth, maxWindowHeight);

// Set it to a very small number
[UIElementUtilities setStringValue:@"w=0 h=0" forAttribute:@"AXSize" ofUIElement:window];

AXValueRef minSizeValue = (AXValueRef)[UIElementUtilities valueOfAttribute:@"AXSize" ofUIElement:window];
CGSize minWindowSize;
AXValueGetValue(minSizeValue, kAXValueCGSizeType, &minWindowSize);

CGFloat minWindowWidth = minWindowSize.width;
CGFloat minWindowHeight = minWindowSize.height;

NSLog(@"min width = %f. min height = %f.", minWindowWidth, minWindowHeight);

// Reset size
[UIElementUtilities setStringValue:[NSString stringWithFormat:@"w=%f h=%f", windowWidth, windowHeight] forAttribute:@"AXSize" ofUIElement:window];

如果您想知道,UIElementUtilities 是我从名为 UIElementInspector 的 Apple 示例项目之一中获取的一个类。

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多