2017-11-24 9 views
0

全画面のウィンドウを持つすべてのアプリケーションの一覧を取得してから、これらのウィンドウのサイズと位置を設定することは可能ですか?画面上のすべてのウィンドウのサイズと位置をすばやく設定する

が、私はこの

let type = CGWindowListOption.optionOnScreenOnly 
let windowList = CGWindowListCopyWindowInfo(type, kCGNullWindowID) as NSArray? as? [[String: AnyObject]] 

for entry in windowList! 
{ 

    var owner = entry[kCGWindowOwnerName as String] as! String 
    var bounds = entry[kCGWindowBounds as String] as? [String: Int] 
    var pid = entry[kCGWindowOwnerPID as String] as? Int32 

    print ("\(owner) \(bounds) \(pid) ") 

    if owner == "Erinnerungen" 
    { bounds!["X"] = 0 
    bounds!["Y"] = 0 
    print("reset bounds") 

    let appRef = AXUIElementCreateApplication(pid!); //TopLevel Accessability Object of PID 
    print(appRef) 

    var value: AnyObject? 
    let result = AXUIElementCopyAttributeValue(appRef, kAXWindowsAttribute as CFString, &value) 

    if result == .success, let windowList = value as? [AXUIElement] 
    { // DO ANYTHING   
    } else 
    { print("Result no Success or no valid windowlist returnd")   
    } 
    } 
} 

のようなウィンドウプロパティのリストを取得するには、今私はpropiertiesの一部を変更しようとするが、それは効果がありません。 はまた、PIDのトップレベルのアクセス可能性のオブジェクトのAttributeValueのを取得しようとすると、AXError(kAXErrorCannotComplete = -25204)を返し

+0

@Martin Rの助けに感謝を手に入れたそのエラーの説明は次のとおりです。メッセージングが何らかの方法で失敗したため、または機能が通信しているアプリケーションがビジー状態であるか、応答していないため、機能を完了できません。 –

+0

私は2つのシステムアプリケーションターミナルとリマインダを試しました。両方ともkAXErrorCannotComplete = -25204。システムアプリはアクセシビリティをサポートしてはいけませんか? – mica

+0

このエラーを回避するには、サンドボックスの電源を切らなければなりませんでした – mica

答えて

0

let type = CGWindowListOption.optionOnScreenOnly 
let windowList = CGWindowListCopyWindowInfo(type, kCGNullWindowID) as NSArray? as? [[String: AnyObject]] 

for entry in windowList! 
{ 
    let owner = entry[kCGWindowOwnerName as String] as! String 
    var bounds = entry[kCGWindowBounds as String] as? [String: Int] 
    let pid = entry[kCGWindowOwnerPID as String] as? Int32 

    if owner == "Terminal" 
    { 
    let appRef = AXUIElementCreateApplication(pid!); //TopLevel Accessability Object of PID 

    var value: AnyObject? 
    let result = AXUIElementCopyAttributeValue(appRef, kAXWindowsAttribute as CFString, &value) 

    if let windowList = value as? [AXUIElement] 
    { print ("windowList #\(windowList)") 
     if let window = windowList.first 
     {    
     var position : CFTypeRef 
     var size : CFTypeRef 
     var newPoint = CGPoint(x: 0, y: 0) 
     var newSize = CGSize(width: 800, height: 800) 

     position = AXValueCreate(AXValueType(rawValue: kAXValueCGPointType)!,&newPoint)!; 
     AXUIElementSetAttributeValue(windowList.first!, kAXPositionAttribute as CFString, position); 

     size = AXValueCreate(AXValueType(rawValue: kAXValueCGSizeType)!,&newSize)!; 
     AXUIElementSetAttributeValue(windowList.first!, kAXSizeAttribute as CFString, size); 
     } 
    } 
    } 
} 
関連する問題