我找到了另一个question and answer,解释了如何使用Accessibility API获取窗口的宽度,高度和位置。有没有办法找到最小尺寸,最大尺寸,调整增量等?
编辑:
我目前的方法是使用AXUIElementCopyAttributeValue
,但我不确定是否可行。查看reference您可以看到我可以访问的很多属性,但我找不到窗口的最小或最大大小。请注意,通过此API可以访问位置。
现在我还在查看一些名为Son of Grab的示例代码,它也可以访问窗口大小和位置,但我不相信该方法适用于最小或最大大小。
答案 0 :(得分:3)
据我所知,没有简单的方法。我找到了一种非常粗略的方法来获取窗口的最大和最小大小。
它涉及将宽度和高度设置为一个非常大的数字,以查看窗口调整大小,然后将此大小记住为最大值,然后将宽度和高度设置为较小的数字并再次执行相同操作。毕竟,我只是将宽度和高度重置为原始值。
显而易见的问题是,用户可以看到窗口已调整大小。
至于调整大小的增量,我无法想到(目前)获取该信息的任何解决方法。
无论如何,这是我用来计算最大和最小尺寸的代码:
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示例项目中获取的类。