2011-08-09 16 views
7

Encontré otro question and answer explicando cómo obtener el ancho, alto y posición de una ventana usando la API de accesibilidad. ¿Hay alguna forma de encontrar el tamaño mínimo, el tamaño máximo, los incrementos de tamaño, etc.?Interfaz de acceso de OS X Ancho mínimo

Editar:

Mi enfoque actual es utilizar AXUIElementCopyAttributeValue pero no estoy seguro de que eso sea posible. En cuanto a reference, puede ver que hay muchas propiedades a las que puedo acceder, pero no puedo encontrar ninguna mención del tamaño mínimo o máximo de la ventana. Tenga en cuenta que parece que la posición es accesible a través de esta API.

Ahora también estaba viendo un código de ejemplo llamado Son of Grab que también puede acceder al tamaño y la posición de la ventana, pero tampoco creo que ese método funcione para el tamaño mínimo o máximo.

+1

También es probable que desee relación de aspecto. –

Respuesta

3

Por lo que puedo decir, no hay una manera fácil de hacerlo. He encontrado un muy crudo método para obtener el tamaño máximo y mínimo de la ventana.

Implica establecer el ancho y alto en un número muy grande para ver cuánto cambia el tamaño de la ventana y luego recordar este tamaño como máximo, luego establecer el ancho y alto en un número pequeño y hacer lo mismo nuevamente. Después de todo esto, restablecí el ancho y la altura a sus valores originales.

El problema obvio con esto es el hecho de que es muy visible para el usuario que la ventana ha sido redimensionada.

En cuanto a los incrementos de cambio de tamaño, no puedo pensar (por el momento) ninguna solución para obtener esa información.

De todos modos aquí está el código que tengo para la elaboración de los valores máximo y mínimo:

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]; 

En caso de que se preguntan, UIElementUtilities es una clase que he tomado de uno de los proyectos de ejemplo de Apple llamados UIElementInspector.

Cuestiones relacionadas