OS X Accessibility API Минимальная ширина - PullRequest
7 голосов
/ 09 августа 2011

Я нашел еще один вопрос и ответ , объясняющий, как получить ширину, высоту и положение окна с помощью API доступа.Есть ли способ найти минимальный размер, максимальный размер, приращение размера и т. Д.?

Редактировать:

Мой текущий подход заключается в использовании AXUIElementCopyAttributeValue, но я не уверен, что это возможно.Глядя на ссылку , вы можете увидеть множество свойств, к которым я могу получить доступ, но я не могу найти упоминания о минимальном или максимальном размере окна.Обратите внимание, что кажется, что позиция доступна через этот API.

Теперь я также рассмотрел пример кода, называемый Сын Граба , который также может получить доступ к размеру и позиции окна, но я не могусчитаю, что метод работает для минимального или максимального размера.

1 Ответ

3 голосов
/ 12 августа 2011

Насколько я могу судить, простого пути не существует. Я нашел один очень грубый метод получения максимального и минимального размера окна.

Это включает в себя установку ширины и высоты на очень большое число, чтобы увидеть, как далеко изменяется размер окна, затем запоминание этого размера как максимального, затем установку ширины и высоты на небольшое число и повторение того же самого. После всего этого я просто сбросил ширину и высоту к их исходным значениям.

Очевидная проблема с этим заключается в том, что пользователю очень хорошо видно, что размер окна был изменен.

Что касается приращений размера, я не могу представить (на данный момент) никакого обходного пути для получения этой информации.

В любом случае вот код, который у меня есть для определения максимального и минимального размера:

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 - это класс, который я взял из одного из примеров проектов Apple, который называется UIElementInspector .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...