Xcode 4.6.1 での作業では、すべてのウィンドウのリストを取得し、特定のウィンドウを (おそらく windowID で) 選択し、そのサイズ (幅と高さ) と原点 (X & Y) を指定したいと考えています。
画面サイズを取得できます。NSStringFromRect を使用すると、NSLog で結果を表示できます。NSRect は {NSPoint の原点です。NSSize size;} および私のディスプレイのコンテキストでは {{0, 0}, {2560, 1440}}.
以下を使用して、ディスプレイのサイズを取得します。(C 構造体とキャストに関する Guillaume のコメントに感謝します):
-(void)awakeFromNib
{
NSRect screenRect = [[NSScreen mainScreen] frame];
CGSize myScreenSize = screenRect.size;
NSLog(@"myScreenSize = %d x %d", (int)myScreenSize.width, (int)myScreenSize.height);
// returns: myScreenSize = 2560 x 1440
}
@end
起動した別のアプリケーション ウィンドウ (自分のプロセスに属していない) のサイズと原点を設定してみます。
まず、実行中のすべてのアプリケーションのリストと、各ウィンドウの windowID を取得してから、移動/サイズ変更するウィンドウを選択します。
他の検索に基づいて、これは CGSPrivate.h またはアクセシビリティ API を使用して実行できます。特定のwindowID/NumberまたはPIDのサイズなどを設定するために、これらのいずれかをまだ使用する方法がわかりません
#import "rsAppDelegate.h"
@implementation rsAppDelegate
-(void)awakeFromNib
{
// get the size of the main screen
NSRect screenRect = [[NSScreen mainScreen] frame];
// devrived fromGuillaume's suggestion
CGSize myScreenSize = screenRect.size;
CGPoint myScreenOrigin = screenRect.origin;
NSLog(@"myScreenSize = %d x %d", (int)myScreenSize.width, (int)myScreenSize.height);
NSLog(@"Origin = %d , %d", (int)myScreenOrigin.x, (int)myScreenOrigin.y);
// To get a list of Application windows, the PID of the window, the window number, and the window bounds (origin, height, width)
CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
for (NSMutableDictionary* entry in (__bridge NSArray*)windowList)
{
NSArray *ownerName = [entry objectForKey:(id)kCGWindowOwnerName];
NSInteger ownerPID = [[entry objectForKey:(id)kCGWindowOwnerPID] integerValue];
NSInteger windowNumber = [[entry objectForKey:(id)kCGWindowNumber] integerValue];
NSArray *ownerBounds = [entry objectForKey:(id)kCGWindowBounds];
NSLog(@"\nApp = %@ \nAppPID = %ld \nwindowNumber = %ld \nProgramBounds = %@", ownerName, (long)ownerPID, (long)windowNumber, ownerBounds);
}
CFRelease(windowList);
/*
OUTPUT:
myScreenSize = 2560 x 1440 | Origin = 0 , 0
App = Xcode
AppPID = 3260
windowNumber = 4493
ProgramBounds = {
Height = 1285;
Width = 1852;
X = 339;
Y = 32;
}
*/
// Knowing the name of the application, it's PID, window number, and bounds to a percentage of the screen:
// Set it's origin and size
}
@end
これで、画面サイズがわかり、各アプリケーションのすべてのウィンドウに関するすべての利用可能な情報が得られました。 PID 3260、ウィンドウ番号 4493 のアプリケーションの NEW Origin、Width、Height を指定するにはどうすればよいですか?
newPos = AXValueCreate(kAXValueCGPointType, windowOrigin);
AXUIElementSetAttributeValue(chosenWindow, kAXPositionAttribute, newPos)
newSize = AXValueCreate(kAXValueCGSizeType, windowSize);
AXUIElementSetAttributeValue(chosenWindow, kAXSizeAttribute, newSize);
selectedWindow を指定するにはどうすればよいですか? windowOrigin と windowSize はどのような形式で指定すればよいですか?
ここに私が見つけた情報がありますが、使用方法がわかりません:
kAXValueCGPointType は CGPoint のラッパーです。AXValue.h で宣言されている CoreGraphics.h を参照してください。
kAXValueCGSizeType は CGSize のラッパーです。
これらは、他の構造体の AXValueType ラッパーです。AXValueCreate および AXValueGetValue 関数を使用して、ラップされた構造とネイティブ構造の間で変換する必要があります。