set the size and position of all windows on the screen in swift

匿名 (未验证) 提交于 2019-12-03 02:03:01

问题:

Is it possible in swift to get a list of all apps with a window in the foreground and then set the size and position of these windows.

I get the list of windows properties like this

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")               }   } } 

Now I try to change some of the propierties, but that has no effect. Also trying to get the AttributeValue for the TopLevel Accessability Object of PID returns AXError (kAXErrorCannotComplete = -25204)

回答1:

Got it thanks to the help of @Martin R

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);       }     }    } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!