我找到了另一个question and answer,它解释了如何使用Accessibility API获取窗口的宽度,高度和位置。有什么方法可以找到最小大小,最大大小,调整大小增量等?
编辑:
我当前的方法是使用AXUIElementCopyAttributeValue
,但是我不确定这是可能的。查看reference,您可以看到有很多属性可以访问,但是我找不到任何关于窗口的最小或最大大小的信息。请注意,似乎可以通过此API访问职位。
现在,我还查看了一些名为Son of Grab的示例代码,该示例代码也可以访问窗口的大小和位置,但是我不认为该方法适用于最小或最大大小。
最佳答案
据我所知,这没有简单的方法。我发现一种非常粗糙的方法可以获取窗口的最大和最小大小。
它涉及将宽度和高度设置为非常大的数字,以查看窗口调整大小的距离,然后记住该大小为最大值,然后将宽度和高度设置为较小的数字,然后再次执行相同的操作。毕竟,我只是将宽度和高度重置为其原始值。
显而易见的问题是,用户已经很清楚地看到窗口已被调整大小。
至于调整大小的增量,目前我还没有想到任何获取该信息的解决方法。
无论如何,这是我用于计算最大和最小大小的代码:
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示例项目中摘录的类。关于objective-c - OS X可访问性API的最小宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6992174/