2011-08-09 16 views
7

アクセシビリティAPIを使用してウィンドウの幅、高さ、および位置を取得する方法を説明する別のquestion and answerが見つかりました。最小サイズ、最大サイズ、サイズ変更の増分などを見つける方法はありますか?OS XアクセシビリティAPIの最小幅

編集:

私の現在のアプローチはAXUIElementCopyAttributeValueを使用することですが、私はそれが可能だかわかりません。 referenceを見ると、私がアクセスできる多くのプロパティがあることがわかりますが、ウィンドウの最小サイズまたは最大サイズについての説明は見つかりません。位置はこのAPIを通じてアクセス可能であるように注意してください。

今、私はまた、ウィンドウのサイズと位置にアクセスすることが可能であるSon of Grabと呼ばれるいくつかのサンプルコードを見ていたが、私は、そのメソッドのいずれか最小または最大サイズの作品とは思いません。

+1

また、アスペクト比が必要です。 –

答えて

3

私が知る限り、簡単な方法はありません。私は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と呼ばれるアップルのサンプルプロジェクトの1から撮影したクラスです。

関連する問題