2017-11-24 5 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); 
     } 
    } 
    } 
}